Zitat:
|
Zitat von stso SELECT * FROM test ORDER BY name, dattime2, size2 LIMIT 30 |
Bei dieser Art Abfrage bringt ein Index nicht so viel. Indizes beschleunigen Suchoperationen, die aber um Grössenordnungen. Hier kann der Index nur für die sage und schreibe drei Sortierungen von 600.000 Elementen genutzt werden... hast Du eine Ahnung, was für ein Aufwand das ist? Auch die besten Sortieralgorithmen haben eine Laufzeitkomplexität von O(n*log n). Kannst Du das nicht irgendwie durch eine WHERE-Klausel einschränken?
Zitat:
|
Zitat von stso SELECT * FROM test ORDER BY SUBSTRING(name,1,10), dattime2, size2 LIMIT 30 |
Und hier hast Du mit dem Aufruf von SUBSTRING den Kardinalsfehler zu Indizes gemacht. Denn die Funktion muss bei jedem Aufruf berechnet werden, im Index stehen tut sie nicht, dementsprechend kann der Index sie nicht beschleunigen. Hier müsstest Du ein eigenes Feld einrichten, wo dieser Teilstring schon drin steht, und dadrauf nen Index legen.
Generell kannst Du dir anzeigen lassen, welche Indizes benutzt werden, indem Du EXPLAIN benutzt, also z.B:
EXPLAIN SELECT * FROM test ORDER BY SUBSTRING(name,1,10), dattime2, size2 LIMIT 30
PS: Es gibt da einen tollen Eintrag in der DCLP-FAQ, der "Warum soll ich nicht 'SELECT * FROM' schreiben" heisst. Hab grad keine Lust, den Link rauszusuchen.