Kom ihåg mig?
Home Menu

Menu


mysql limit

Ämnesverktyg Visningsalternativ
Oläst 2006-06-09, 13:12 #1
Conths avatar
Conth Conth är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2005
Inlägg: 908
Conth Conth är inte uppkopplad
Mycket flitig postare
Conths avatar
 
Reg.datum: Aug 2005
Inlägg: 908
Hittar inte svaret/anledningen till detta beteende.
Jag gör en sökning i databasen med limit och order by
Jag har ett index som matcher order by-villkoret (hdshop,hdcolor) som väljs om jag kör explain)

Jag förväntar mig att inte alla rader behöver komma med på examined när jag ska hämta ett intervall av rader vid sökning?! Tycker det borde räcka att använda indexet?! Har jag fattat det hela fel eller är det någon som kan förklara detta?!

Jag kör mysql 5.0.16 på linux.

Från slow-loggen:
# Query_time: 23 Lock_time: 0 Rows_sent: 30 Rows_examined: 72520
SELECT * FROM hdsearch where hdshop = 1 order by hdshop, hdcolor limit 72490, 30;
Conth är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-09, 13:28 #2
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Hur ser EXPLAIN ut för den queryn?
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-09, 14:01 #3
Conths avatar
Conth Conth är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2005
Inlägg: 908
Conth Conth är inte uppkopplad
Mycket flitig postare
Conths avatar
 
Reg.datum: Aug 2005
Inlägg: 908
Den visar att indexet används men att rows är högt:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE hdsearch ref PRIMARY,base,color color 12 const,const 44411 Using where


Vet inte varför rows blir 44411...!?
Conth är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-09, 14:37 #4
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Ibland är det snabbare att skita i index. T.ex. du har 1000 rader i en tabell där 990 av dem har samma specifika värde i en indexerad kolumn. Om du vill hämta ut alla rader som har detta specifika värde i just den kolumnen så är det ju onekerligen snabbare att skita i indexet.

Förövrigt är det bara att acceptera att MySQL gör tokiga saker och att det finns en del prestandabuggar.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-09, 16:06 #5
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
WizKid WizKid är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2004
Inlägg: 618
Antagligen beror det på att det är väldigt många av raderna som har hdshop = 1. Frågan är om det skulle vara snabbare att köra:
SELECT * FROM hdsearch where hdshop = 1 order by hdcolor limit 72490, 30;
och ha ett index på hdcolor. Möjligtvis även tvinga MySQL till att använda hdcolor-indexet så att den inte använder någon index för hdshop.
WizKid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-09, 19:32 #6
Conths avatar
Conth Conth är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Aug 2005
Inlägg: 908
Conth Conth är inte uppkopplad
Mycket flitig postare
Conths avatar
 
Reg.datum: Aug 2005
Inlägg: 908
Citat:
Originally posted by WizKid@Jun 9 2006, 16:06
Antagligen beror det på att det är väldigt många av raderna som har hdshop = 1. Frågan är om det skulle vara snabbare att köra:
SELECT * FROM hdsearch where hdshop = 1 order by hdcolor limit 72490, 30;
och ha ett index på hdcolor. Möjligtvis även tvinga MySQL till att använda hdcolor-indexet så att den inte använder någon index för hdshop.
Ska testa det. Fattar ändå inte varför indexet inte "biter"...

Citat:
Ibland är det snabbare att skita i index. T.ex. du har 1000 rader i en tabell där 990 av dem har samma specifika värde i en indexerad kolumn. Om du vill hämta ut alla rader som har detta specifika värde i just den kolumnen så är det ju onekerligen snabbare att skita i indexet.
Så är det inte i detta fallet.

Citat:
Förövrigt är det bara att acceptera att MySQL gör tokiga saker och att det finns en del prestandabuggar
Förvisso - men detta känns väl ändå som en rätt basic-grej!?!? Att använda befintligt index isf table scan - eller missar jag något. Någon som har sett samma fenomen??
Conth är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-06-09, 19:56 #7
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Jag har sett lite liknande konstigheter vid joins tidigare.. men har då avskrivit det som fel jag skulle ha gjort.. sen har jag beställt snabbare servrar och slutat tänka på det hela..
grazzy är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:30.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017