The_HulkMedlem sedan juni 20031 837 inlägg Hejsan!
(OBS! använder MySQL)
Har fått klart för mig att index är bra att ha om man vill snabba upp sökningar i databaser men det tar längre till att lägga till saker med index.
Men hur ska man lägga upp sina index? såg att man kan ha samma kolumn i flera index samt ha fler kolumner i samma index.
behöver man bry sig om själv indexet sen när man väl satt up pdatabasen? använder man tabellen på samma sätt som om den inte skulle ha några index?
Vad är det för nackdel med att ha alla kolumner i ett index?
är det bättre att ha alla kolumner i egna index?
ska man bara ha index på de kolmuner man har i sitt vilkor i SQL-fråga, alltså i WHERE-biten?
Om det är något annat att tänka på vid användning av index så skriv gärna det. Eller även om det rör sökning i databaser.
Tack på förhand!
/Patrik
LarsGMedlem sedan dec. 200012 464 inlägg
behöver man bry sig om själv indexet sen när man väl satt up pdatabasen?
Nej.
använder man tabellen på samma sätt som om den inte skulle ha några index?
Ja.
Vad är det för nackdel med att ha alla kolumner i ett index?
Om du har ett villkor på andra kolumnen i ett index så kan det inte utnyttjas. Tar även onödigt disk utrymme.
är det bättre att ha alla kolumner i egna index?
Det beror på vilka frågor du ställer. Om du har villkor mot olika kolumner i samma tabell så kan det löna sig att ha flera kolumner i ett index.
ska man bara ha index på de kolmuner man har i sitt vilkor i SQL-fråga, alltså i WHERE-biten?
Ungefär. Möjligen att man kan ha index på kolumner som används i order by.
The_HulkMedlem sedan juni 20031 837 inlägg Tack LarsG!
Fick lite mer klarhet i hur det ska användas men var något jag inte förstod.
Om du har ett villkor på andra kolumnen i ett index så kan det inte utnyttjas. Tar även onödigt disk utrymme.
så man ska bara ha de kolumnerna i index som man använder i sitt vilkorsutryck? har det någon betydelse i vilken ordning de finns?
t.ex
Tabell t1 har tre kolumner k1, k2, k3.
select * from t1 where k1=... and k2=...
då ska både k1 och k2 finns i index
men o mdet ser ut så här
select * from t1 where k2=...
så ska bara k2 finns med.
men om man använder båda frågorna ska man då ha två index ett med k1, k2 och ett med bara k2?
sölar det ner sökningen att ha alla kolumner i ett index?
LarsGMedlem sedan dec. 200012 464 inlägg
Tabell t1 har tre kolumner k1, k2, k3.
select * from t1 where k1=... and k2=...
då ska både k1 och k2 finns i index
men o mdet ser ut så här
select * from t1 where k2=...
så ska bara k2 finns med.
men om man använder båda frågorna ska man då ha två index ett med k1, k2 och ett med bara k2?
I princip ja. Du kan också vända på ordningen i indexet (k2,k1) i detta fall. Det beror även på vilken fördelning du har på datat. T.ex. om det bara finns tio distinkta värden i en kolumn i en tabell med 1 miljon poster så är ett index på en sådan kolumn inte så värdefullt.
Det kan även finnas anledning att ta med kolumner i index även om de inte förekommer i sökningen. T.ex.
select c1,c2,c3
from t
where c1 = 47
and c2 = 11
Om man definerar ett index som innehåller kolumnerna c1,c2 och c3 så kan databashanteraren hämta allt data enbart genom att läsa index. Dvs, den behöver inte läsa något alls ur tabellen vilket kan vara en stor vinst om tabellen innehåller flera (breda) kolumner.