27. december 2008 - 19:45
Der er
14 kommentarer og 1 løsning
Add index forskelle
er der nogen performance forskel på at tilføje index på een column eller to columns ad gangen? altså ALTER TABLE `table` ADD INDEX ( `type` ) vs ALTER TABLE `table` ADD INDEX ( `forumtopostid` , `forumpostid` )
Annonceindlæg tema
Cloud & AI
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
27. december 2008 - 19:51
#1
Der er stort forskel. Et index på (F1) og et index på (F2) gør: ... WHERE F1=X og ... WHERE F2=Y hurtigere mens et index på (F1,F2) gør: ... WHERE F1=X AND F2=Y hurtigere - muligvis vil ... WHERE F1=X også blive hurtigere men ... WHERE F2=Y vil ikke blive hurtigere. Så du skal vælge enkelt eller dobbelt udfra hvad du skal bruge - benærk at det er validt at lave index på både (F1), (F2) og (F1,F2) !
27. december 2008 - 19:55
#2
hvor var det godt jeg spurgte, jeg tror jeg forstår det. vil muligvis poste et eksempel senere og spørge om det er rigtigt lavet lig et svar :)
27. december 2008 - 20:00
#3
så lige et tillægsspm: hvis man creater table og bruger INDEX på et felt, ser koden sådan ud: KEY `felt` (`felt`) men hvis ALTER, så ser det sådan ud: ADD INDEX (`felt`) altså ADD INDEX / KEY, Hvorfor?
27. december 2008 - 20:06
#4
INDEX og KEY er synonymer i MySQL Det er ikke: KEY feltnavn (feltnavn) men: KEY indexnavn (feltnavn) Og jeg bruger altid: CREATE TABLE ... CREATE INDEX indexnavn ON tabelnavn(feltnavn)
27. december 2008 - 20:13
#5
super tillægsspm nr 2: Hvis man laver et index på (F1,F2) og kalder med WHERE (F2=y AND F1=x) fungerer det så stadig som det skal, selv om man ikke kalder med WHERE (F1=x AND F2=y)
27. december 2008 - 20:18
#6
Jeg vil tro at det stadig virker - ellers er den optimizer da den dummest optimizer jeg længe har set. Men du kan vel teste med EXPLAIN kommandoen !!
27. december 2008 - 20:19
#7
Og et svar
27. december 2008 - 20:23
#8
tak for deltagelsen
27. december 2008 - 20:30
#9
Hvis du er seriøs omkring din MySQL database og indexes, så er det en meget god ide at lære at læse EXPLAIN output og checke sine queries med den.
27. december 2008 - 20:37
#10
lige et tillægsspm hvis jeg adder index: (F1,F2) (F1,F3) så advarer phpmyadmin fordi der er to index på samme felt Gør det noget?
27. december 2008 - 20:42
#11
Ikke så vidt jeg ved. Generelt vil jeg anbefale brug af enkelt felts index. Normalt er det bedst til ON og WHERE betingelser. Multi felts index er mest til UNIQUE INDEX og til foreign keys til tabel med multi felt primary key.
27. december 2008 - 20:45
#12
"Multi felts index er mest til UNIQUE INDEX og til foreign keys til tabel med multi felt primary key" det kan du garantere ikke oversætte til forståeligt dansk :) jeg tror nu alligevel jeg vil forsøge mig med multi felts index og så komme med ekspempler her som du kan se. Og så kan jeg altid lave det om hvis det ikke fungerer.
27. december 2008 - 21:15
#13
Et UNIQUE INDEX er et index som ikke tillader duplikater. Ligesom PRIMARY KEY. Et eksempel på et multi felt unique index kunne være: reservation: id - primary key, auto increment dato genstandid ved at sætte et unique index på (dato,genstandid) forhindrer man dobbelt bookning helt nede på database niveau. En foreign key er et eller flere felter som peger på en primary key i en anden tabel.
27. december 2008 - 21:27
#14
vil det være en fordel at lave: id - UNIQUE INDEX auto increment på en column der ellers ser således ud: id - primary key, auto increment hvis sql'en er noget ala SELECT tabel.felt FROM tabel JOIN tabel2 ON tabel2.foreign_key = tabel.id
27. december 2008 - 21:34
#15
Nej. En primær nøgle er et unikt index med lidt ekstra. Alle tabeller bør/skal have en primær nøgle.
Computerworld tilbyder specialiserede kurser i database-management