sql >> Database >  >> RDS >> Mysql

MySQL gebruikt filesort op geïndexeerde TIMESTAMP-kolom

In dit geval gebruikt MySQL uw index niet om te sorteren, en het is een GOED iets. Waarom? Uw tabel bevat slechts 64k rijen, de gemiddelde rijbreedte is ongeveer 26 bytes (als ik de kolomgroottes goed heb toegevoegd), dus de totale tabelgrootte op de schijf zou ongeveer 2 MB moeten zijn. Het is erg goedkoop om slechts 2 MB aan gegevens van de schijf naar het geheugen te lezen (waarschijnlijk in slechts 1-2 schijfbewerkingen of zoeken) en voer dan gewoon bestandssortering in het geheugen uit (waarschijnlijk variatie op quicksort).

Als MySQL zou ophalen op indexvolgorde zoals u wilt, zou het 64000 schijfzoekbewerkingen moeten uitvoeren, het ene record na het andere! Het zou heel, heel langzaam zijn geweest.

Indexen kunnen goed zijn als je ze kunt gebruiken om snel naar een bekende locatie in een enorm bestand te springen en slechts een kleine hoeveelheid gegevens te lezen, zoals in de WHERE-clausule. Maar in dit geval is het geen goed idee - en MySQL is niet dom!

Als je tabel erg groot was (meer dan RAM), dan zou MySQL zeker je index gaan gebruiken - en dat is ook een goede zaak.



  1. groeperen op maand van Unix-tijdstempelveld

  2. Correcte methode voor het verwijderen van meer dan 2100 rijen (op ID) met Dapper

  3. cakephp vriendschap tussen gebruikers Modellen aan elkaar koppelen

  4. Aantal SQL per groep