Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL verwendet Filesort für indizierte TIMESTAMP-Spalten

In diesem Fall verwendet MySQL Ihren Index nicht zum Sortieren, und das ist eine gute Sache. Warum? Ihre Tabelle enthält nur 64.000 Zeilen, die durchschnittliche Zeilenbreite beträgt etwa 26 Byte (wenn ich die Spaltengrößen richtig hinzugefügt habe), also sollte die Gesamttabellengröße auf der Festplatte etwa 2 MB betragen. Es ist sehr billig, nur 2 MB Daten von der Festplatte in den Speicher zu lesen (wahrscheinlich in nur 1-2 Festplattenoperationen oder Suchvorgängen) und führen Sie dann einfach eine Dateisortierung im Speicher durch (wahrscheinlich eine Variante von Quicksort).

Wenn MySQL wie gewünscht nach Indexreihenfolge suchen würde, müsste es 64000 Suchvorgänge auf der Festplatte ausführen, einen Datensatz nach dem anderen! Es wäre sehr, sehr langsam gewesen.

Indizes können gut sein, wenn Sie sie verwenden können, um schnell zu bekannten Speicherorten in großen Dateien zu springen und nur kleine Datenmengen zu lesen, wie in der WHERE-Klausel. Aber in diesem Fall ist es keine gute Idee - und MySQL ist nicht dumm!

Wenn Ihre Tabelle sehr groß wäre (mehr als die RAM-Größe), würde MySQL sicherlich anfangen, Ihren Index zu verwenden - und das ist auch gut so.