SQL-Anweisungen in MySQL verwenden keine Indizes

SQL-Anweisungen in MySQL verwenden keine Indizes

MySQL-Abfrage ohne Verwendung der Indexaggregation

Wie wir alle wissen, ist das Hinzufügen von Indizes eine effektive Methode, um die Abfragegeschwindigkeit zu verbessern. In vielen Fällen verwenden Abfragen jedoch auch nach dem Hinzufügen von Indizes immer noch keine Indizes, was die Leistung erheblich beeinträchtigt. Hier sind einige einfache Beispiele dafür, dass MySQL keine Indizes verwendet.

Wenn MySQL schätzt, dass die Verwendung eines Indexes langsamer wäre als ein vollständiger Tabellenscan, wird der Index nicht verwendet. Wenn der Spaltenschlüssel beispielsweise gleichmäßig select * from table_name where key>1 and key<90;

Wenn Sie eine MEMORY/HEAP-Tabelle verwenden und in der Where-Bedingung zum Indizieren der Spalte kein "=" verwenden, wird der Index nicht verwendet. Die Head-Tabelle verwendet den Index nur, wenn die Bedingung "=" verwendet wird.

Bei durch „oder“ getrennten Bedingungen gilt: Wenn die Spalte in der Bedingung vor „oder“ einen Index hat, die Spalte danach jedoch nicht, werden die beteiligten Indizes nicht verwendet. Beispiel: select * from table_name where key1='a' or key2='b'; wenn für key1 ein Index vorhanden ist, für key2 jedoch nicht, wird die Abfrage den Index nicht verwenden.

Zusammengesetzter Index: Wenn die Indexspalte nicht der erste Teil des zusammengesetzten Indexes ist, wird der Index nicht verwendet (d. h., er entspricht nicht dem Präfix ganz links). Wenn der zusammengesetzte Index beispielsweise (Schlüssel1, Schlüssel2) ist, wird die Abfrage select * from table_name where key2='b'; den Index nicht verwenden.

Wenn „like“ mit „%“ beginnt, wird der Index dieser Spalte nicht verwendet. Beispielsweise select * from table_name where key1 like '%a' ; diese Abfrage wird nicht verwendet, selbst wenn ein Index für key1 vorhanden ist.

Wenn die Spalte eine Zeichenfolge ist, muss der Zeichenkonstantenwert in der Where-Bedingung in Anführungszeichen gesetzt werden. Andernfalls wird der Index für die Spalte nicht verwendet, selbst wenn er vorhanden ist. select * from table_name where key1=1; Wenn in der Spalte „key1“ eine Zeichenfolge gespeichert ist, wird diese nicht verwendet, auch wenn ein Index für „key1“ vorhanden ist.

Aus dem Obigen können wir ersehen, dass ein Index, selbst wenn wir ihn erstellen, möglicherweise nicht verwendet wird. Woher wissen wir also, wie unser Index verwendet wird? ? In MySQL gibt es zwei Variablen: Handler_read_key und Handler_read_rnd_key . Wenn der Wert von Handler_read_key sehr hoch und der Wert von Handler_read_rnd_key sehr niedrig ist, bedeutet dies, dass der Index häufig nicht verwendet wird und Sie die Erstellung des Indexes überdenken sollten. Sie können die Werte dieser beiden Parameter anzeigen durch: show status like 'Handler_read%' .

Weitere Informationen zum korrekten Erstellen eines MySQL-Index finden Sie in der ausführlichen Erklärung zum korrekten Erstellen eines MySQL-Index. Wie wir alle wissen, können Tabellenindizes die Effizienz des Datenabrufs verbessern, die E/A-Kosten der Datenbank senken und die Kosten für die Datenbanksortierung reduzieren. Indizes sind jedoch nicht immer effektiv. Beispielsweise führen die folgenden Situationen zu Indexfehlern:

1. Wenn in der Bedingung ein „oder“ steht, wird der Index nicht verwendet, auch wenn in der Bedingung ein Index steht (deshalb wird „oder“ in SQL-Anweisungen so wenig wie möglich verwendet)

Hinweis: 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.

2. Bei einem mehrspaltigen Index wird der Index nur verwendet, wenn der erste Teil verwendet wird.

3. Wenn die Like-Abfrage mit % beginnt, wird der Index nicht verwendet.

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.

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

Darüber hinaus können Sie die Verwendung des Indexes einsehen

Status wie „Handler_read%“ anzeigen;

Darauf kann jeder achten:

handler_read_key : Je höher der Wert, desto besser. Ein höherer Wert gibt an, wie oft der Index für die Abfrage verwendet wird.

handler_read_rnd_next : Je höher dieser Wert ist, desto weniger effizient ist die Abfrage.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Erläuterung des Problems bei der Auswahl des MySQL-Speicherzeittyps
  • Eine kurze Einführung in die Verwendung des Dezimaltyps in MySQL
  • Mysql-Methode zum Kopieren einer Datenspalte einer Tabelle in eine Spalte einer anderen Tabelle
  • So verbessern Sie die MySQL Limit-Abfrageleistung
  • Konfiguration der MySQL-Master/Slave-Datenbanksynchronisierung und häufige Fehler
  • Verwendung und Analyse des Mysql Explain-Befehls
  • So erstellen Sie MySQL-Indizes richtig
  • Erklärung zur Verwendung von „Ersetzen“ und „Ersetzen in“ in MySQL
  • So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen
  • Einführung in die Verwendung von MySQL-Befehlen zum Erstellen, Löschen und Abfragen von Indizes

<<:  Realisierung von Provinz- und Gemeindeverknüpfungseffekten auf Basis von JavaScript

>>:  Einfache Verwendung des Vue Vee-Validate-Plugins

Artikel empfehlen

Verwendung von MySQL-Triggern

Trigger können dazu führen, dass vor oder nach de...

CSS-Lösung zum Zentrieren von Elementen mit variabler Breite und Höhe

1. Horizontale Mitte Öffentlicher Code: html: <...

MySQL 8.0.19 Installations- und Konfigurations-Tutorial unter Windows 10

Ich werde nächstes Semester MySQL lernen. Ich hab...

HTML-Tabellen-Tag-Tutorial (46): Tabellenfußzeilen-Tag

Mit dem Tag <tfoot> wird der Stil der Tabel...

Native js realisiert das Ziehen und Ablegen des Neun-Quadrat-Rasters

Verwenden Sie natives JS, um ein neuneckiges Rast...

Detailliertes Beispiel für die Verwendung von useState in React

Verwendungsstatus useState fügt einer Komponente ...

Allgemeine Shell-Skriptbefehle und zugehöriges Wissen unter Linux

Inhaltsverzeichnis 1. Einige Punkte, die Sie beac...

Was sind die Unterschiede zwischen SQL und MySQL

Was ist SQL? SQL ist eine Sprache zum Betrieb von...

Mybatis-Implementierungsmethode für Fuzzy-Abfragen

Mybatis-Implementierungsmethode für Fuzzy-Abfrage...

Verkürzen Sie die Seiten-Rendering-Zeit, damit die Seite schneller läuft

Wie kann die Seiten-Rendering-Zeit im Browser so ...