sql >> Database teknologi >  >> RDS >> Mysql

MySQL bruger filesort på indekseret TIMESTAMP kolonne

I dette tilfælde bruger MySQL ikke dit indeks til sortering, og det er en GOD ting. Hvorfor? Din tabel indeholder kun 64.000 rækker, den gennemsnitlige rækkebredde er omkring 26 bytes (hvis jeg tilføjede kolonnestørrelser rigtigt), så den samlede tabelstørrelse på disken burde være omkring 2MB. Det er meget billigt at læse kun 2MB data fra disken ind i hukommelsen (sandsynligvis på kun 1-2 diskoperationer eller søgninger) og derefter blot udføre filsortering i hukommelsen (sandsynligvis variation af quicksort).

Hvis MySQL foretog hentning efter indeksrækkefølge, som du ønsker, ville den skulle udføre 64000 disksøgningsoperationer, den ene post efter den anden! Det ville have været meget, meget langsomt.

Indekser kan være gode, når du kan bruge dem til hurtigt at hoppe til en kendt placering i en stor fil og kun læse en lille mængde data, som i WHERE-klausulen. Men i dette tilfælde er det ikke en god idé - og MySQL er ikke dum!

Hvis dit bord var meget stort (mere end RAM-størrelse), så ville MySQL helt sikkert begynde at bruge dit indeks - og det er også en god ting.



  1. Hvordan implementerer man tagging-system svarende til SO i php/mysql?

  2. Big Data med PostgreSQL og Apache Spark

  3. Sådan får du sidste 12 måneders data i MySQL

  4. Importer flere .sql-dumpfiler til mysql-databasen fra shell