sql >> Databasteknik >  >> RDS >> Mysql

MySQL använder filesort på indexerad TIMESTAMP-kolumn

I det här fallet använder MySQL inte ditt index för sortering, och det är en BRA sak. Varför? Din tabell innehåller bara 64 000 rader, den genomsnittliga radbredden är cirka 26 byte (om jag har lagt till kolumnstorlekar rätt), så den totala tabellstorleken på disken bör vara cirka 2 MB. Det är väldigt billigt att läsa bara 2 MB data från disken till minnet (förmodligen på bara 1-2 diskoperationer eller sökningar) och sedan helt enkelt utföra filsortering i minnet (förmodligen variation av quicksort).

Om MySQL gjorde hämtning enligt indexordning som du vill, skulle den behöva utföra 64000 disksökningsoperationer, den ena posten efter den andra! Det skulle ha gått väldigt, väldigt långsamt.

Index kan vara bra när du kan använda dem för att snabbt hoppa till känd plats i en stor fil och läsa bara en liten mängd data, som i WHERE-satsen. Men i det här fallet är det ingen bra idé - och MySQL är inte dumt!

Om ditt bord var mycket stort (mer än RAM-storleken) skulle MySQL verkligen börja använda ditt index - och det är också bra.



  1. Oracle-fel vid uppstart en annan start/avstängning av denna instans pågår

  2. Varför beter UNION ALL med och utan parentes olika?

  3. 2 sätt att få partitionsinformation för en tabell i SQL Server (T-SQL)

  4. Varför blockerar SQL Server 2008 SELECT's på långa transaktioner INSERT's?