|
| MySQL og index Fra : Harald |
Dato : 28-01-08 17:36 |
|
Jeg bruger MySQL 4.0
Når jeg kører denne:
SELECT * from boger
WHERE titel LIKE '%hans%'
ORDER BY titel
LIMIT 2000
tager det 0.52 sek.
titel er en varchar
hvis jeg så opretter et index på titel tager det 1.53 sek, altså ca. 3 gange
så lang tid.
Jeg ville mene at det burde gå hurtigere selv om jeg bruger % foran hans,
men det skal måske være sådan?
/HK
| |
Thorbjørn Ravn Ander~ (28-01-2008)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 28-01-08 17:44 |
|
"Harald" <noname@nomail.dk> writes:
> Jeg bruger MySQL 4.0
>
> Når jeg kører denne:
> SELECT * from boger
> WHERE titel LIKE '%hans%'
> ORDER BY titel
> LIMIT 2000
>
> tager det 0.52 sek.
>
> titel er en varchar
>
> hvis jeg så opretter et index på titel tager det 1.53 sek, altså ca. 3 gange
> så lang tid.
> Jeg ville mene at det burde gå hurtigere selv om jeg bruger % foran hans,
> men det skal måske være sådan?
Prøv at lav 100 gange så mange rækker i din tabel.
--
Thorbjørn Ravn Andersen
| |
Harald (28-01-2008)
| Kommentar Fra : Harald |
Dato : 28-01-08 17:47 |
|
""Thorbjørn" Ravn Andersen" <nospam0000@gmail.com> skrev i en meddelelse
news:yu2zlupzyr4.fsf@luhmann.netc.dk...
> "Harald" <noname@nomail.dk> writes:
>
>> Jeg bruger MySQL 4.0
>>
>> Når jeg kører denne:
>> SELECT * from boger
>> WHERE titel LIKE '%hans%'
>> ORDER BY titel
>> LIMIT 2000
>>
>> tager det 0.52 sek.
>>
>> titel er en varchar
>>
>> hvis jeg så opretter et index på titel tager det 1.53 sek, altså ca. 3
>> gange
>> så lang tid.
>> Jeg ville mene at det burde gå hurtigere selv om jeg bruger % foran hans,
>> men det skal måske være sådan?
>
> Prøv at lav 100 gange så mange rækker i din tabel.
Hvorfor det? Tabellen indeholder nu ca. 200000 rækker.
/HK
| |
Gert Krabsen (28-01-2008)
| Kommentar Fra : Gert Krabsen |
Dato : 28-01-08 18:24 |
|
Harald skrev:
> Jeg bruger MySQL 4.0
>
> Når jeg kører denne:
> SELECT * from boger
> WHERE titel LIKE '%hans%'
> ORDER BY titel
> LIMIT 2000
>
> tager det 0.52 sek.
>
> titel er en varchar
>
> hvis jeg så opretter et index på titel tager det 1.53 sek, altså ca. 3 gange
> så lang tid.
> Jeg ville mene at det burde gå hurtigere selv om jeg bruger % foran hans,
> men det skal måske være sådan?
>
> /HK
Når du bruger LIKE søgning med joker foran slipper den jo ikke for at
hente alle records ind i processen, og så er der ingen reel gevinst ved
at bruge Index. Men da den selv finder ud af det, så skader det nu
heller ikke.
Mit gæt er at tidsforskellen skyldes andre påvirkninger - andre
processer der arbejder samtidig m.v.
Hvis du derimod kører de to SQL'er 100 gange, og forskellen statistisk
holder sig på en faktor 3, så er det noget, man kunne grave lidt i..
| |
Harald (28-01-2008)
| Kommentar Fra : Harald |
Dato : 28-01-08 19:18 |
|
"Harald" <noname@nomail.dk> skrev i en meddelelse
news:479e0490$0$90268$14726298@news.sunsite.dk...
> Jeg bruger MySQL 4.0
>
> Når jeg kører denne:
> SELECT * from boger
> WHERE titel LIKE '%hans%'
> ORDER BY titel
> LIMIT 2000
>
> tager det 0.52 sek.
>
> titel er en varchar
>
> hvis jeg så opretter et index på titel tager det 1.53 sek, altså ca. 3
> gange så lang tid.
> Jeg ville mene at det burde gå hurtigere selv om jeg bruger % foran hans,
> men det skal måske være sådan?
ok, det var mig der ikke tænkte mig om.
Jeg brugte en gammel version af MySQL CC og den gav et helt forkert resultat
mht. tiden, desuden kørte jeg på en MySQL server som ligger på samme
computer. Efter at have laver mit eget lille test program og logget på en
MySQL server på en anden computer så får jeg nogle mere fornuftige
resultater.
/HK
| |
Thorbjørn Ravn Ander~ (28-01-2008)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 28-01-08 19:21 |
|
"Harald" <noname@nomail.dk> writes:
>> Prøv at lav 100 gange så mange rækker i din tabel.
>
> Hvorfor det? Tabellen indeholder nu ca. 200000 rækker.
Din like fremtvinger formentligt et full table scan, og ved at forøge
datamængden ryger du fra hukommelse til disk.
Understøtter din database iøvrigt "EXPLAIN PLAN"? En forklaring kunne
være at indekset bruges til at sortere INDEN der laves full table scan.
--
Thorbjørn Ravn Andersen
| |
|
|