Heim > Datenbank > MySQL-Tutorial > MySQL Advanced 13 – SQL durch Indizes optimieren

MySQL Advanced 13 – SQL durch Indizes optimieren

黄舟
Freigeben: 2016-12-29 16:55:55
Original
1312 Leute haben es durchsucht

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:
Nach dem Login kopieren

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 < <= >= 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)
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage