Heim >Datenbank >MySQL-Tutorial >MySQL Advanced 13 – SQL durch Indizes optimieren
1. Übersicht
Binärbaum——> Indexdatei: Effizienz log2N
10 Mal abrufen: 2 hoch 10. 1024 Datensätze.
Overhead durch Index
Wenn Sie sich die Datendateien (Datenverzeichnis unter dem Installationsverzeichnis) ansehen, finden Sie drei Dateien,
.frm: die die Struktur des darstellen Tabelle
.myd: Stellt Daten dar
.myi: Stellt indizierte Dateien dar
Durch den Index verursachte Probleme: Dies führt zur Effizienz des Einfügens, Aktualisierens und Löschens
Felder, die häufig aktualisiert werden, eignen sich nicht zum Erstellen von Indizes.
Felder mit geringer Eindeutigkeit sind nicht für die Erstellung von Indizes geeignet. Nur wenn das Geschlecht einer Person beispielsweise männlich oder weiblich ist
und die folgenden Bedingungen erfüllt, wird ein Index erstellt
1. Er muss häufig in der Where-Bedingung verwendet werden.
2. Dieses Feld wird sich nicht allzu häufig ändern.
2. Indexnutzungsszenarien
1. Finden Sie schnell Datensätze, die die Where-Bedingung erfüllen.
2. Bestimmen Sie schnell den Kandidatensatz. Wenn die Where-Bedingung mehrere Indexfelder verwendet, gibt MySQL der Verwendung des Index Vorrang, der die Größe des Kandidatensatzes minimieren kann, um Datensätze, die die Bedingungen nicht erfüllen, so schnell wie möglich zu entfernen.
3. Wenn in der Tabelle ein gemeinsamer Index vorhanden ist, der aus mehreren Feldern besteht, wird bei der Suche nach Datensätzen automatisch auch das am weitesten links stehende Präfixfeld des gemeinsamen Index als Index verwendet, um die Suche zu beschleunigen.
Zum Beispiel: Wenn drei Indizes für eine Tabelle erstellt werden, ein gemeinsamer Index bestehend aus (c1, c2, c3), dann sind (c1), (c1, c2), (c1, c2, c3). Alle werden als Index verwendet, (c2, c3) wird nicht als Index verwendet und (c1, c3) verwendet tatsächlich nur den c1-Index.
4. Beim Zusammenführen mehrerer Tabellen werden Indizes verwendet (sofern die an der Verknüpfung beteiligten Felder in diesen Tabellen indiziert sind)
5. Wenn ein Feld indiziert wurde, bitte bei der Sortierung bzw Gruppenoperationen für dieses Feld verwenden MySQL den Index.
3. Ausführungsplan für ineffizientes SQL durch EXPLAIN-Analyse
Zum Beispiel:
mysql> explain select * from taxgrouptaxes\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: taxgrouptaxes type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 1 Extra:
select_type: gibt den Typ von SELECT an,
common Die Werte sind
SIMPLE: einfache Tabelle, die keine Tabellenverknüpfungen oder Unterabfragen verwendet
PRIMARY: Hauptabfrage, die äußere Abfrage
union: in UNION Die zweite oder Nachfolgende Abfrageanweisung
SUBQUERY: Die erste Auswahl in der Unterabfrage: Die Tabelle, die die Ergebnismenge ausgibt
Typ gibt an, dass MYSQL in der Tabelle zu finden ist die gewünschte Zeile. Oder Zugriffstyp genannt.
Zu den gängigen Typen gehören: 🎜>
const,system
null
Von oben nach unten reicht die Leistung vom schlechtesten zum besten.
1: type=all vollständiger Tabellenscan.
2: Typ=Index-Index-Scan
3: Typ=Tange-Indexbereich-Scan. Wird häufig in Operationen wie 7cb9091baf3e2c81106f6565e75575c8= zwischen
4 verwendet: type=ref s verwendet einen eindeutigen Index-Scan oder einen Präfix-Scan eines eindeutigen Index.
5: type=eq_ref ähnelt ref. Der Unterschied besteht darin, dass der verwendete Index ein eindeutiger Index ist. Für jeden Indexschlüsselwert stimmt nur ein Datensatz in der Tabelle überein.
6: type=const/system Es gibt höchstens eine übereinstimmende Zeile in einer einzelnen Tabelle und die Abfrage ist sehr schnell.
7: type=null MYSQL muss nicht auf Tabellen oder Indizes zugreifen. Die Ergebnisse erhalten Sie direkt.
possible_keys: Gibt die Indizes an, die in der Abfrage verwendet werden können
key: Gibt den tatsächlich verwendeten Index an
key_len: Die Länge des verwendeten Indexfelds
Zeilen: Anzahl der Scanzeilen
Extra: Erläuterung und Scan der Ausführung. Das Einbeziehen weiterer Spalten, die nicht in die Anzeige passen, ist für den Ausführungsplan wichtig.
4. Analysieren Sie SQL über das Show-Profil
1. Überprüfen Sie zunächst, ob MySQL das Show-Profil unterstützt.
2 Anweisung zum Öffnen des Profils auf Sitzungsebene
3. Nach der Ausführung können Sie die Abfrage-ID des aktuellen SQL über die Anweisung show Profiles anzeigen.
4. Verwenden Sie das Anzeigeprofil für die Abfrage queryID
Das Obige ist der Inhalt von MySQL Advanced 13 – Optimieren von SQL durch Indizierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). .php.cn )!
mysql> select @@have_profiling; +------------------+ | @@have_profiling | +------------------+ | YES | +------------------+ 1 row in set (0.00 sec)