/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste