Både INDEX, UNIQUE og PRIMARY kan indeholde flere felter - og det er så (for UNIQUE og PRIMARY) *kombinationen* af felter som ikke må optræde flere gange.
Forskelle mellem UNIQUE og PRIMARY: - UNIQUE kan indeksere kolonner med NULL; det kan PRIMARY KEY ikke. - Du må kun have een PRIMARY - dette er i henhold til SQL standarden. Du må have lige så mange UNIQUE som du vil.
PRIMARY er altså (bortset fra navne-restriktionen) en UNIQUE på en NOT NULL kolonne. Faktisk vil MySQL automatisk sætte det første UNIQUE/NOT NULL index til at være PRIMARY hvis der ikke allerede er defineret en sådan
Bemærk i øvright at MySQL kun kan bruge et indeks hvis *starten* af indekset kan bruges i søgningen. F.eks, kan et indeks på kombinationen (A, B, C) bruges til at lave søgniner på (A, B, C), (A, B) og (A) -- men ikke f.eks. (B), (C) og (B, C)
arne > Jeg er ikke helt med? Altså man kan godt sætte INDEX og UNIQUE på mere end et felt?
majkat > "Du må kun have een PRIMARY - dette er i henhold til SQL standarden" Jamen alle felter man sætter til PRIMARY bliver jo sådan set til en fælles nøgle?
Der kan kun være en PRIMARY KEY. Der kan være mange INDEX. PRIMARY KEY er altid UNIQUE. PRIMARY KEY skal være der (i nogen databaser). Kort sagt: PRIMARY KEY er noget helt specielt.
ok, men jeg er bare stadig ikke helt sikker på hvad et sammensat INDEX er? hvad er forskellen på at lave enkelte nøgler med INDEX og så lave sammensatte? der er vel ikke rigtig nogen forskel?
Umiddelbart vil jeg sige at man kun bruger et index på mere end et felt, hvis dataene gør at som oftest vil have en kombineret test på dem (WHERE felt1=X AND felt2=Y) i sine queries.
PRIMARY KEY på mere end et felt kan være nødvendigt for at få noget unikt. Men jeg vil næsten altid foretrække at smække et ekstra autogenereret id felt på i stedet for.
arne > ehm...? så må du hellere lige komme med en forklaring til dette: "Det væsentligste kriterie for om et felt skal have et index må være om det bruges til join eller where betingelse i queries"
Hvor mange rækker skal der så til før det er bevendt? Jeg har tabeller med under 200-300 rækker? Kan det svare sig med indeksering her? :)
mht få rækker -- der er stor sansynlighed for at MySQL simpelt hen ignorerer indexes for tabeller med få rækker - det er hurtigere bare at indlæse tabellen frem for først indekset, så tabellen.
Så i værste fald har du spildt en lille smule diskplads...
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.