Gemeinsame MySQL-Indexwirksamkeitsbedingungen und Indexungültigkeitsbedingungen

Gemeinsame MySQL-Indexwirksamkeitsbedingungen und Indexungültigkeitsbedingungen

1. Bedingungen für das Versagen des gemeinsamen Indexes

Ein gemeinsamer Index wird auch als zusammengesetzter Index bezeichnet. Ein Index für zwei oder mehr Spalten wird als zusammengesetzter Index bezeichnet.

Für zusammengesetzte Indizes gilt: MySQL verwendet die Felder im Index von links nach rechts. Eine Abfrage kann nur einen Teil des Index verwenden, aber nur den äußersten linken Teil. Der Index ist beispielsweise der Schlüsselindex (a,b,c). Es unterstützt die Suche nach drei Kombinationen: a | a,b | a,b,c, aber nicht die Suche nach b,c. Wenn das äußerste linke Feld eine konstante Referenz ist, ist der Index sehr effektiv.

Mithilfe der zusätzlichen Spalten im Index können Sie den Umfang Ihrer Suche einschränken. Allerdings unterscheidet sich die Verwendung eines Index mit zwei Spalten von der Verwendung zweier separater Indizes. Die Struktur eines zusammengesetzten Indexes ähnelt einem Telefonbuch, in dem der Name einer Person aus einem Nachnamen und einem Vornamen besteht. Das Telefonbuch wird zuerst nach Nachnamenpaaren und dann nach Vornamenpaaren für Personen mit demselben Nachnamen sortiert. Ein Telefonbuch ist sehr nützlich, wenn Sie den Nachnamen kennen, noch nützlicher, wenn Sie sowohl den Vor- als auch den Nachnamen kennen, aber nutzlos, wenn Sie nur den Vornamen kennen.

Wenn Sie einen zusammengesetzten Index erstellen, sollten Sie daher sorgfältig auf die Reihenfolge der Spalten achten. Zusammengesetzte Indizes sind nützlich, wenn Sie Suchvorgänge in allen Spalten des Index oder nur in den ersten paar Spalten durchführen. Sie sind nicht nützlich, wenn Sie Suchvorgänge nur in einer der späteren Spalten durchführen.

Beispiel: Erstellen Sie einen zusammengesetzten Index aus Name, Alter und Geschlecht.

    Tabelle myTest erstellen (
         eine Ganzzahl,
         b int,
         c int,
         SCHLÜSSEL a (a, b, c)
    );

(1) wähle * aus myTest, wobei a=3 und b=5 und c=4; ---- abc-Reihenfolge
Die drei Indizes abc werden alle in der Where-Bedingung verwendet und spielen alle eine Rolle.

(2) wähle * aus myTest, wobei c=4 und b=6 und a=3;
Die Reihenfolge der Bedingungen in „where“ wird von MySQL vor der Abfrage automatisch optimiert und der Effekt ist derselbe wie im vorherigen Satz.

(3) wähle * aus myTest, wobei a=3 und c=7;
A nutzt den Index, B nicht, also nutzt C den Indexeffekt nicht.

(4) select * from myTest where a=3 and b>7 and c=3; ---- b Bereichswert, Haltepunkt, blockiert den Index von c
a wird verwendet, b wird auch verwendet, aber c wird nicht verwendet. In diesem Fall ist b ein Bereichswert, der ebenfalls ein Haltepunkt ist, aber den Index selbst verwendet.

(5) select * from myTest where b=3 and c=4; --- Gemeinsame Indizes müssen in der richtigen Reihenfolge und alle verwendet werden. Da Index a nicht verwendet wird, werden die Indizes b und c hier nicht verwendet.

(6) wähle * aus myTest, wobei a>4 und b=7 und c=9;
a wird verwendet, b wird nicht verwendet, c wird nicht verwendet

(7) wähle * aus myTest, wobei a=3, sortiert nach b;
a verwendet den Index und b verwendet auch die Auswirkung des Index bei der Ergebnissortierung. Jedes Segment von b unterhalb von a wird sortiert.

(8) wähle * aus myTest, wobei a=3, sortiert nach c;
a verwendet den Index, aber c hat hier keinen Sortiereffekt, da in der Mitte ein Haltepunkt vorhanden ist. Verwenden Sie „explain“, um die Dateisortierung anzuzeigen.

(9) wähle * aus meiner Tabelle, wobei b=3 ist und nach a sortiert ist;
b verwendet den Index nicht und a spielt im Sortierprozess nicht die Rolle des Index

2. Bedingungen für einen Indexausfall

  • Führen Sie keine Vorgänge (Berechnungen, Funktionen, (automatische oder manuelle) Typkonvertierungen) an der Indexspalte aus, da dies zu einem Indexfehler und einem Wechsel zu einem vollständigen Tabellenscan führen würde.
  • Die Speicher-Engine kann die Spalten auf der rechten Seite der Indexbereichsbedingung nicht verwenden
  • Versuchen Sie, abdeckende Indizes zu verwenden (Abfragen, die nur auf den Index zugreifen (Indexspalten und Abfragespalten sind konsistent)) und reduzieren Sie select *
  • MySQL kann bei Ungleichheit (!= oder <>) keine Indizes verwenden, was zu einem vollständigen Tabellenscan führt.
  • ist null, ist nicht null und der Index kann auch nicht verwendet werden ---- Hier gibt es eine Frage. Nach dem Testen kann es tatsächlich verwendet werden. Die Ref- und Const-Ebenen sind nicht alle
  • Wenn „like“ mit einem Platzhalterzeichen („%abc…“) beginnt, schlägt der MySQL-Index fehl und der Vorgang wird zu einem vollständigen Tabellenscan. Frage: Wie löst man das Problem, dass der Index bei „% string %“ nicht verwendet wird?

Die String-Indizierung schlägt ohne einfache Anführungszeichen fehl

SELECT * from staffs where name='2000'; -- Weil MySQL eine implizite Typkonvertierung auf der untersten Ebene durchführt SELECT * from staffs where name=2000; --- Es wird kein Index verwendet

Allgemeine Hinweise

  • Versuchen Sie bei Einzelschlüsselindizes einen Index auszuwählen, der für die aktuelle Abfrage eine bessere Filterleistung bietet.
  • Bei der Auswahl eines zusammengesetzten Indexes wird das Feld mit den besten Filtereigenschaften in der aktuellen Abfrage so weit oben wie möglich in der Indexfeldreihenfolge eingestuft.
  • Versuchen Sie bei der Auswahl eines zusammengesetzten Indexes einen Index auszuwählen, der mehr Felder in der Where-Klausel der aktuellen Abfrage enthalten kann.
  • Versuchen Sie, den geeigneten Index auszuwählen, indem Sie Statistiken analysieren und die Methode zum Schreiben der Abfrage so weit wie möglich anpassen.

Dies ist das Ende dieses Artikels über die Bedingungen für die Wirksamkeit gemeinsamer MySQL-Indizes und die Bedingungen für die Ungültigkeitserklärung von Indizes. Weitere relevante Inhalte zur Wirksamkeit gemeinsamer MySQL-Indizes finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der MySQL-Datenbankindizes und Fehlerszenarien
  • Häufige Szenarien und Vermeidungsmethoden für Indexfehler in MySQL
  • Prinzip des MySQL-Indexfehlers
  • Mehrere Methoden zur Lösung des Problems des MySQL-Fuzzy-Abfrageindexfehlers
  • Teilen Sie 15 Szenarien, in denen MySQL-Indizes fehlschlagen

<<:  Detaillierte Erklärung zu Javascript-Dateien und Blobs

>>:  Einführung in RHCE-Bridging, passwortfreie Anmeldung und Portnummernänderung

Artikel empfehlen

Tutorial zum binären Suchbaumalgorithmus für JavaScript-Anfänger

Inhaltsverzeichnis Was ist ein binärer Suchbaum (...

Ein QQ-Chatroom basierend auf vue.js

Inhaltsverzeichnis Einführung Nachfolgend sehen S...

Detaillierter Installationsprozess von mysql5.7.21 unter Win10

In diesem Artikel erfahren Sie mehr über die Inst...

Natives JS zum Erzielen eines funkelnden Sterneneffekts

In diesem Artikelbeispiel wird der spezifische Co...

Nginx-Reverseproxy und Lastausgleichspraxis

Reverse-Proxy Unter Reverse-Proxy versteht man de...

Designbeispiele für Dropdown-Menüs und Schiebemenüs

Ich habe viele Websites gefunden, die Dropdown- od...

Detaillierte Analyse der MySQL-Abfrageabfangung

Inhaltsverzeichnis 1. Abfrageoptimierung 1. MySQL...

React-Methode zum Anzeigen von Daten auf Seiten

Inhaltsverzeichnis Übergeordnete Komponente „list...

Untersuchung der Eingabetastenfunktion vom Typ „Datei“

<br />Beim Hochladen auf manchen Websites wi...

Detailliertes Tutorial zum Upgrade von Zabbix Monitoring 4.4 auf 5.0

1. Zabbix-Backup [root@iZ2zeapnvuohe8p14289u6Z /]...