/ 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] Brug af indexes
Fra : Morten Winther


Dato : 16-04-01 12:12

Hej

Jeg har et problem da jeg ikke forstår hvorfor MySQL ikke bruger index på
denne query:

SELECT userlist.user_id, userlist.user_name
FROM userlist
LEFT JOIN userlinks ON userlinks.to_id = userlist.user_id AND
userlinks.from_id = 2
WHERE (userlinks.from_id = 2 and userlinks.state = 1) OR userlist.user_id =
2.

Explain:

table type possible_keys key key_len ref rows Extra
userlist ALL PRIMARY,user_id 13
userlinks ALL from_id,to_id 24 where used

Hvorfor er scanner den ALL på userlinks når der 2 possible_keys?

Mine tables:

CREATE TABLE userlinks (
from_id mediumint(8) unsigned DEFAULT '0' NOT NULL,
to_id mediumint(8) unsigned DEFAULT '0' NOT NULL,
state tinyint(3) unsigned DEFAULT '0' NOT NULL,
last_time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
KEY from_id (from_id),
KEY to_id (to_id)
);

CREATE TABLE userlist (
user_id mediumint(8) unsigned DEFAULT '0' NOT NULL auto_increment,
user_name varchar(50) NOT NULL,
PRIMARY KEY (user_id),
KEY user_id (user_id)
);


Nogen der kan give lidt hjælp. Jeg er ikke blevet blevet klogere af
www.mysql.com

/ morten



 
 
Morten Guldager (16-04-2001)
Kommentar
Fra : Morten Guldager


Dato : 16-04-01 12:24

On Mon, 16 Apr 2001 13:12:07 +0200, Morten Winther <mw@get2net.dk> wrote:
>
>Jeg har et problem da jeg ikke forstår hvorfor MySQL ikke bruger index på
>denne query:

Hvad med lidt sample data?

Det gør det lidt lettere at se så.

Bare en 10 inserts (fra mysqldump) til hver tabel eller noget i den stil.

Men ellers vil jeg mene at du mangler index på userlinks.state



/Morten

Morten Winther (17-04-2001)
Kommentar
Fra : Morten Winther


Dato : 17-04-01 21:00


"Morten Guldager" <mogul@guldager.uni.to> wrote in message
news:slrn9dllii.fs4.mogul@guldager.uni.to...
> On Mon, 16 Apr 2001 13:12:07 +0200, Morten Winther <mw@get2net.dk> wrote:
> >
> >Jeg har et problem da jeg ikke forstår hvorfor MySQL ikke bruger index på
> >denne query:
>
> Hvad med lidt sample data?
>
> Det gør det lidt lettere at se så.
>
> Bare en 10 inserts (fra mysqldump) til hver tabel eller noget i den stil.
>
> Men ellers vil jeg mene at du mangler index på userlinks.state

Ser ud til at det var fordi der ikke var nok data i mine tabeller. Der skal
åbenbart være et vist antal rows før MySQL begynder at bruge indexes.

Kan være jeg dumper lidt data en anden gang hvis der er probs ;-D

/ morten




Peter Lykkegaard (18-04-2001)
Kommentar
Fra : Peter Lykkegaard


Dato : 18-04-01 12:12


"Morten Winther" <mw@get2net.dk> wrote in message
news:9bi784$pkv$1@news.inet.tele.dk...
>
> Ser ud til at det var fordi der ikke var nok data i mine tabeller. Der
skal
> åbenbart være et vist antal rows før MySQL begynder at bruge indexes.
>
Jeg ved ikke med MySQL, men MSSQL kikker på IO når den estimerer hvilke
index der skal anvendes - mon ikke det er noget lignende i dette tilfælde?

Det er min oplevelse at ved et vist antal poster i databasen, skal man
definere indices på én måde - senere i databasens levetid, hvor antallet af
poster er væsentligt forøget er der andre indices der skal til

mvh/Peter Lykkegaard



Dennis Haney (20-04-2001)
Kommentar
Fra : Dennis Haney


Dato : 20-04-01 09:57


"Morten Winther" <mw@get2net.dk> skrev i en meddelelse
news:9bi784$pkv$1@news.inet.tele.dk...
>
> "Morten Guldager" <mogul@guldager.uni.to> wrote in message
> news:slrn9dllii.fs4.mogul@guldager.uni.to...
> > On Mon, 16 Apr 2001 13:12:07 +0200, Morten Winther <mw@get2net.dk>
wrote:
> > >
> > >Jeg har et problem da jeg ikke forstår hvorfor MySQL ikke bruger index

> > >denne query:
> >
> > Hvad med lidt sample data?
> >
> > Det gør det lidt lettere at se så.
> >
> > Bare en 10 inserts (fra mysqldump) til hver tabel eller noget i den
stil.
> >
> > Men ellers vil jeg mene at du mangler index på userlinks.state
>
> Ser ud til at det var fordi der ikke var nok data i mine tabeller. Der
skal
> åbenbart være et vist antal rows før MySQL begynder at bruge indexes.

Hvis man kigger længe nok i mysql dokumentationen ser man at før mysql
overhoved begynder at bruge et index skal den være sikker på at den ikke
skal over 30% af tabellen igennem.

Dennis



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

Månedens bedste
Årets bedste
Sidste års bedste