FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Mycket flitig postare
|
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; |
|||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Mycket flitig postare
|
Hur ser EXPLAIN ut för den queryn?
|
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Mycket flitig postare
|
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...!? |
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Bara ett inlägg till!
|
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. |
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Mycket flitig postare
|
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. |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Citat:
Citat:
Citat:
|
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Klarade millennium-buggen
|
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..
|
||
![]() |
![]() |
Svara |
|
|