Zusammenfassung mehrerer Situationen, in denen MySQL-Indizes fehlschlagen

Zusammenfassung mehrerer Situationen, in denen MySQL-Indizes fehlschlagen

1. Indizes speichern keine Nullwerte

Genauer gesagt speichern einspaltige Indizes keine Nullwerte und zusammengesetzte Indizes speichern keine Werte, die alle Null sind. Indizes können keine Nullwerte speichern. Wenn die Bedingung „ist null“ für diese Spalte verwendet wird, kann der Index daher nicht verwendet werden, da im Index kein Nullwert vorhanden ist und nur die gesamte Tabelle gescannt werden kann.
Warum kann die Indexspalte keine Nullwerte speichern?
Der Aufbau eines Baums aus Indexspaltenwerten erfordert zwangsläufig viele Vergleichsoperationen. Die Besonderheit des Nullwertes besteht darin, dass die meisten beteiligten Operationen den Wert Null annehmen.
In diesem Fall kann der Nullwert nicht am Indizierungsprozess teilnehmen. Das heißt, Nullwerte erscheinen nicht wie andere Werte in den Blattknoten des Indexbaums.

2. Nicht geeignet für Spalten mit weniger Schlüsselwerten (Spalten mit mehr doppelten Daten)

Wenn die Indexspalte TYPE 5 Schlüsselwerte hat und 10.000 Datensätze vorhanden sind, dann greift WHERE TYPE = 1 auf 2.000 Datenblöcke in der Tabelle zu.
Zusätzlich zum Zugriff auf die Indexblöcke müssen insgesamt über 200 Datenblöcke zugegriffen werden.
Wenn die gesamte Tabelle gescannt wird und angenommen wird, dass sich in einem Datenblock 10 Datenelemente befinden, müssen nur 1.000 Datenblöcke abgerufen werden. Da beim vollständigen Tabellenscan weniger Datenblöcke abgerufen werden, wird der Index definitiv nicht verwendet.

3. Führende Fuzzy-Abfragen können keinen Index verwenden (wie „%XX“ oder „%XX%“)

Angenommen, es gibt eine Codespalte mit den Werten „AAA“, „AAB“, „BAA“, „BAB“, und wenn eine Bedingung vorliegt, bei der der Code beispielsweise „%AB“ ist, kann die Reihenfolge des Index nicht verwendet werden, da die vorherige Bedingung nicht eindeutig ist, und die Werte müssen einzeln durchsucht werden, um festzustellen, ob die Bedingung erfüllt ist. Dies führt zu einem vollständigen Index-Scan oder einem vollständigen Tabellen-Scan. Wenn die Bedingung lautet, dass Code wie „A %“ ist, können Sie nach der Position des CODE suchen, der mit A in CODE beginnt. Wenn Sie auf Daten stoßen, die mit B beginnen, können Sie die Suche beenden, da die nachfolgenden Daten die Anforderungen definitiv nicht erfüllen. Auf diese Weise können Sie die Vorteile des Index nutzen.

4. Mehrere Situationen, in denen ein Indexfehler auftritt

1. Wenn in der Bedingung ein „oder“ vorkommt, wird es nicht verwendet, auch wenn in der Bedingung ein Index vorkommt (deshalb wird „oder“ so wenig wie möglich verwendet)
Wenn Sie „oder“ verwenden und den Index wirksam machen möchten, können Sie in der „oder“-Bedingung nur jeder Spalte einen Index hinzufügen.

Wählen Sie * aus tb1, wobei nid = 1 oder Name = „[email protected]“ ist.
 
 
 --Spezial: Die Oder-Bedingung ist nur ungültig, wenn eine Spalte nicht indexiert ist. Im Folgenden wird der Index select * from tb1 where nid = 1 or name = 'seven'; verwendet.
   Wählen Sie * aus tb1, wobei nid = 1 oder Name = „[email protected]“ und E-Mail = „alex“ ist.

2. Bei einem mehrspaltigen Index wird der Index nur verwendet, wenn er der erste zu verwendende Teil ist

3.Like-Abfrage beginnt mit %

Wählen Sie * aus TB1, wo die E-Mail wie „%cn“ aussieht;

4. Wenn der Spaltentyp ein String ist, müssen die Daten in der Bedingung in Anführungszeichen gesetzt werden, sonst wird der Index nicht verwendet.

wähle * aus tb1, wobei E-Mail = 999 ist;

5. Wenn MySQL schätzt, dass ein vollständiger Tabellenscan schneller ist als ein Index, verwendet es den Index nicht.

6. Normaler Index bedeutet nicht, dass keine Indizierung erfolgt

- !=
 Wählen Sie * aus tb1, wobei E-Mail != 'Alex' ist.
 
 --Spezial: Wenn es sich um einen Primärschlüssel handelt, wird der Index trotzdem verwendet select * from tb1 where nid != 123
->
 Wählen Sie * aus tb1, wo E-Mail > „Alex“
 
 
 --Spezial: Wenn der Primärschlüssel oder Index ein Integer-Typ ist, wird der Index trotzdem verwendet select * from tb1 where nid > 123
  wähle * aus tb1, wobei num > 123

7. Ganz linkes Präfix des zusammengesetzten Index

Wenn der kombinierte Index lautet: (Name, E-Mail)

Name und E-Mail -- mit Index
Name -- Verwenden Sie den Index
E-Mail – keinen Index verwenden

Oben finden Sie eine detaillierte Zusammenfassung mehrerer Situationen, in denen MySQL-Indizes fehlschlagen. Weitere Informationen zu MySQL-Indexfehlern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Analyse mehrerer Situationen, in denen MySQL-Indizes fehlschlagen
  • Häufige Szenarien und Vermeidungsmethoden für Indexfehler in MySQL
  • Detaillierte Analyse der Situationen, in denen Datenbankindizes in MySQL fehlschlagen
  • Wird der Index durch MySQL ungültig?
  • Analyse von fünf Situationen von MySQL-Indexfehlern
  • Mehrere Methoden zur Lösung des Problems des MySQL-Fuzzy-Abfrageindexfehlers
  • Zusammenfassung einiger gängiger Schreibmethoden, die zu MySQL-Indexfehlern führen
  • Detaillierte Analyse mehrerer Situationen, in denen MySQL-Indizes fehlschlagen
  • Analyse mehrerer Situationen, in denen der MySQL-Index fehlschlägt
  • Detaillierte Erläuterung der MySQL-Datenbankindizes und Fehlerszenarien

<<:  Detaillierte Schritte zum Bereitstellen von SpringBoot-Projekten mit Docker in Idea

>>:  js realisiert die nicht auswählbare Dropdown-Box-Version der dreistufigen Verknüpfung von Provinzen, Städten und Bezirken

Artikel empfehlen

So ändern Sie in Nginx die über http aufgerufene Website in https

Inhaltsverzeichnis 1. Hintergrund 2. Voraussetzun...

HTML-Grundlagen-Zusammenfassungsempfehlung (Textformat)

HTML-Tags zur Textformatierung 標簽 描述 <b> 定義...

Mit vsftp einen FTP-Server unter Linux aufbauen (mit Parameterbeschreibung)

einführen In diesem Kapitel wird hauptsächlich de...

CSS3 realisiert den grafischen Fallanimationseffekt

Sehen Sie zuerst den Effekt Implementierungscode ...

htm-Anfängerhinweise (unbedingt für Anfänger lesen)

1. Was ist HTML HTML (HyperText Markup Language):...

Eine einfache Möglichkeit, das Passwort in MySQL 5.7 zu ändern

Dies ist ein offizieller Screenshot. Nach der Ins...

Zusammenfassung der drei Regeln für die React-Statusverwaltung

Inhaltsverzeichnis Vorwort Nr.1 Ein Fokus Nr. 2 E...

MySQL verwendet inet_aton und inet_ntoa, um IP-Adressdaten zu verarbeiten

Dieser Artikel stellt vor, wie Sie IP-Adressdaten...