Es gibt zwei Fälle, in denen in in MySQL verwendet wird: 1. Wenn der Wertebereich von in klein ist, wird in den Index verwendet. 2. Wenn der Wertebereich von in groß ist, wird in nicht den Index verwenden. Es wird jedoch der vollständige Tabellenscan verwendet. Denn wenn zu viele Bedingungen vorhanden sind, werden viele Daten zurückgegeben, was zu einem Speicherüberlauf im Anwendungsheap und zu Indexfehlern führen kann.
Die Betriebsumgebung dieses Tutorials: Windows10-System, MySQL8.0.22-Version, Dell G3-Computer.
Schlussfolgerung: IN wird definitiv den Index verwenden, aber wenn der Wertebereich von IN groß ist, führt dies zu einem Indexfehler und es wird ein vollständiger Tabellenscan verwendet.
Das Navicat-Visualisierungstool verwendet die Erklärungsfunktion So zeigen Sie SQL-Ausführungsinformationen an
Wir müssen nur auf die wichtigsten Typinformationen achten. Es ist offensichtlich, ob der Index verwendet wird:
Der Typ-Ergebniswert ist in der Reihenfolge:
system > alle: vollständiger Tabellenscan
Index: eine andere Form des vollständigen Tabellenscans, mit der Ausnahme, dass seine Scanmethode in der Reihenfolge des Index ist
Bereich: ein Bereichsindexscan, der im Vergleich zum vollständigen Tabellenscan des Index einen Bereich hat Einschränkungen, also besser als index
ref: Die Suchbedingungsspalte verwendet einen Index und ist nicht der Primärschlüssel oder eindeutig. Tatsächlich bedeutet dies, dass, obwohl ein Index verwendet wird, der Wert der Indexspalte nicht eindeutig ist und es Duplikate gibt. Selbst wenn das erste Datenelement mithilfe des Index schnell gefunden wird, kann es auf diese Weise nicht angehalten werden und muss einen kleinen Bereich in der Nähe des Zielwerts scannen. Der Vorteil besteht jedoch darin, dass nicht die gesamte Tabelle gescannt werden muss, da der Index geordnet ist und selbst bei doppelten Werten nur ein sehr kleiner Bereich gescannt wird.
const: Wenn ein Primärschlüssel nach where als bedingte Abfrage platziert wird, kann der MySQL-Optimierer normalerweise die Abfrage optimieren und in eine Konstante umwandeln. Wie und wann die Konvertierung erfolgen soll, hängt vom Optimierer ab. Im Allgemeinen muss sichergestellt werden, dass die Abfrage mindestens die Bereichsebene erreicht, vorzugsweise ref. Wenn Index und alle im Typ angezeigt werden, bedeutet dies, dass eine vollständige Tabelle vorliegt Der Scan wird ohne Indizierung durchgeführt. Die Effizienz ist gering. Zu diesem Zeitpunkt muss SQL optimiert werden.
Wenn Extra Dateien verwenden oder Temporär verwenden angezeigt wird, bedeutet dies, dass der Index nicht verwendet werden kann und die Optimierung so schnell wie möglich durchgeführt werden muss.
possible_keys: Der von SQL verwendete Index
key: Zeigt den Schlüssel (Index) an, den MySQL tatsächlich verwenden möchte. Wenn kein Index ausgewählt ist, ist der Schlüssel NULL
rows: Zeigt die Anzahl der Zeilen an, die MySQL bei der Ausführung der Abfrage untersuchen muss.
Szenario 2: Erweitern Sie den Wertebereich in IN
Der Index wird zu diesem Zeitpunkt noch verwendet, aber die Effizienz ist verringertSzenario 3: Erweitern Sie den Wertebereich von IN weiter
Schauen Sie sich an Im Bild oben wurde festgestellt, dass derzeit kein Index vorhanden ist, sondern ein vollständiger Tabellenscan.Lassen Sie uns über die Schlussfolgerung sprechen
Schlussfolgerung: IN wird definitiv den Index verwenden, aber wenn der Wertebereich von IN groß ist, führt dies dazu, dass der Index fehlschlägt und der vollständige Tabellenscan verwendet wird.
Übrigens: Wenn not in verwendet wird, wird der Index nicht verwendet.
Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonWird der Index in MySQL verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!