Wahrscheinlich wäre es besser, MySql über den Abfrageplan entscheiden zu lassen. Es ist gut möglich, dass ein Indexscan weniger effizient ist als ein vollständiger Tabellenscan.
Für diese Tabelle gibt es zwei Datenstrukturen auf der Platte
- Der Tisch selbst; und
- Der Primärschlüssel-B-Tree-Index.
Wenn Sie eine Abfrage ausführen, hat der Optimierer zwei Optionen für den Zugriff auf die Daten:
SELECT * FROM userapplication WHERE application_id > 1025;
Den Index verwenden
- Durchsuchen Sie den B-Tree-Index, um die Adresse aller Zeilen zu finden, in denen
application_id > 1025
ist - Lesen Sie die entsprechenden Seiten der Tabelle, um die Daten für diese Zeilen zu erhalten.
Den Index nicht verwenden
Scannen Sie die gesamte Tabelle und wählen Sie die entsprechenden Datensätze aus.
Auswahl der besten Strategie
Die Aufgabe des Abfrageoptimierers besteht darin, die effizienteste Strategie zum Abrufen der gewünschten Daten auszuwählen. Wenn viele Zeilen mit einer application_id > 1025
vorhanden sind dann kann es tatsächlich weniger effizient sein, den Index zu verwenden. Zum Beispiel, wenn 90 % der Datensätze eine application_id > 1025
haben dann müsste der Abfrageoptimierer etwa 90 % der Blattknoten des B-Tree-Index scannen und dann mindestens 90 % der Tabelle lesen, um die eigentlichen Daten zu erhalten; dazu müssten mehr Daten von der Festplatte gelesen werden, als nur die Tabelle zu scannen.