ja... Det er nok mig der har formuleret mig dårligt..
Jeg tænkte mere i retning af at et Index kan indeholde flere felter.
F.eks.
felter ------ a b c d e f
Primary Key, a index mitindex=b,c,d,e,f
fremfor
Primary Key, a index mitindex1=b index mitindex2=c index mitindex3=d index mitindex4=e
Kan ikke helt lure forskellen. Formentlig har det noget at gøre med at løsning1 kun er smart hvis der skal selectes noget hvor det som SELECTES ligger til "venstre" for WHERE, a'la
SELECT b,c,d,e FROM tabel WHERE f=n
Formentlig fordi db enginen aligevel skal læse nedaf/venstre->højre..
.... Kan ikke lige helt sætte det ind i min samlede forstilling om hvordan det fungerer :o)
med mindre man "driller" databasen lidt: WHERE (b is not null or b is null) and c=z
Hvis man vil optimere en given sql-forespørgsel imod et konkret index, så (afhængig af database) kan man tvinge parseren til at bruge et konkret index vha. ovenstående.
jeg tror egentlig, at arne_v og jeg er ret enige - det er blot niveauet vil ikke er helt enige om :-)
Indexes har flere forskellige formål. Et index bliver brugt for at sikre uniq-nes - f.eks. på en nøgle/primary key - hvilket du egentlig spørger til her.
Men index bruges også til at optimere opslag i databasen (læs: søgninger). Lige præcis på dette område er der meget stor forskel på de forskellige databaser, men som tommelfinger regel, så vil en søgning først finde records vha. et index - det som "passer" bedst på afgrænsningerne (se mit eksempel).
Hvis du laver enkeltindexes på kolonnerne (lige gyldigt om det er uniq eller ej), så vil en kombineret søgning aldrig kunne finde et index, som kan bruges. Derfor vil søgningen blive sløvet ned i forhold til et kombineret index.
Håber det forklarer det - ellers prøver vi bare igen :-)
ja, de 3 eller eventuelt alle 4 hvis der er mange records i tabellen. Hvis du har et index over alle 4 kolonner, så skal man aldrig have fat i selve tabellen - og det er en fordel, hvis der er mange records - eller der er mange kolonner.
Formentlig vil det være hurtigere med enkelte indexes - afhængig af database, men det kan gøres hurtigere, så ja, du er på rette spor.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.