Zusammenfassung einiger Tipps zum MySQL-Indexwissen

Zusammenfassung einiger Tipps zum MySQL-Indexwissen

1. Grundkenntnisse der Indizierung

1.1 Vorteile von Indizes

  1. Reduziert die Datenmenge, die der Server scannen muss, erheblich und beschleunigt den Datenbankabruf
  2. Hilft dem Server, Sortierungen und temporäre Tabellen zu vermeiden
  3. Konvertieren Sie zufällige E/A in sequentielle E/A

1.2 Nützlichkeit von Indizes

  1. Schnelles Finden von Zeilen, die der WHERE-Klausel entsprechen
  2. Zeilen ausschließen. Wenn Sie zwischen mehreren Indizes wählen können, verwendet MySQL normalerweise den Index, der die wenigsten Zeilen findet.
  3. Wenn die Tabelle einen mehrspaltigen Index hat, kann der Optimierer jedes ganz linke Präfix des Index verwenden, um Zeilen zu finden.
  4. Bei einer Tabellenverknüpfung Zeilendaten aus anderen Tabellen abrufen
  5. Suchen Sie den Minimal- oder Maximalwert einer bestimmten Indexspalte
  6. Wenn die Sortierung oder Gruppierung auf dem am weitesten links stehenden Präfix des verfügbaren Indexes erfolgt, wird die Tabelle sortiert und gruppiert
  7. In einigen Fällen können Abfragen optimiert werden, um Werte abzurufen, ohne die Datenzeilen abzufragen.

1.3 Klassifizierung der Indizes

Die Datenbank erstellt standardmäßig einen Index, allerdings nicht für den Primärschlüssel, sondern für den eindeutigen Schlüssel, da der Primärschlüssel eindeutig und nicht leer ist.

  • Primärschlüsselindex: Dies ist ein spezieller eindeutiger Index, der keine Nullwerte zulässt. (Primärschlüsseleinschränkung ist ein Primärschlüsselindex)
  • Eindeutiger Index: Die Werte in der Indexspalte müssen eindeutig sein, Nullwerte sind jedoch zulässig.
  • Normaler Index: Der grundlegende Indextyp in MySQL, der keine Einschränkungen aufweist und das Einfügen von doppelten Werten und Nullwerten in die Spalte zulässt, in der der Index definiert ist, ausschließlich für schnellere Datenabfragen.
  • Volltextindex: Kann nur auf der MyISAM-Engine und nur auf Feldern des Typs CHAR, VARCHAR und TEXT verwendet werden.
    >Was ist Volltextindizierung? Das bedeutet, dass Sie in einem Textstapel die Datensatzzeile finden können, zu der das Feld gehört, indem Sie ein bestimmtes Schlüsselwort eingeben. Wenn beispielsweise „LOL LPL 牧小农“ vorhanden ist, können Sie den Datensatz möglicherweise finden, indem Sie 牧小农 eingeben. Dies ist eine Möglichkeit, da die Verwendung der Volltextindizierung viele Details beinhaltet und wir nur die allgemeine Idee kennen müssen. In der allgemeinen Entwicklung wird die Volltextindizierung nicht verwendet, da sie viel physischen Platz beansprucht und die Modifizierbarkeit von Datensätzen einschränkt. Daher wird sie selten verwendet.
  • Zusammengesetzter Index: Ein Index, der auf der Grundlage einer Kombination mehrerer Felder in einer Tabelle erstellt wird. Der Index wird nur verwendet, wenn die linken Felder dieser Felder in den Abfragebedingungen verwendet werden. Bei Verwendung eines zusammengesetzten Index wird das am weitesten links stehende Präfix verwendet.

Beispielsweise besteht der Index hier aus drei Feldern: ID, Name und Alter. Die Indexzeilen werden in der Reihenfolge ID/Name/Alter gespeichert. Der Index kann die folgenden Feldkombinationen indizieren: (ID, Name, Alter), (ID, Name) oder (ID). Wenn die abzufragenden Felder nicht das am weitesten links stehende Präfix des Indexes darstellen, wird der Index nicht verwendet. Beispielsweise werden Alter oder die Kombination aus (Name, Alter) nicht über den Index abgefragt.

1.4 Fachbegriffe für Vorstellungsgespräche

Tabellenrückgabe: Nachdem die Datenbank die Zeile gefunden hat, in der sich der angegebene Datensatz anhand des Index (nicht des Primärschlüssels) befindet, muss sie die Daten anhand des Primärschlüssels erneut aus dem Datenblock abrufen. Dies wird als Tabellenrückgabe bezeichnet.

Index zum Thema: Lesen Sie einen Artikel, den ich geschrieben habe: Ich habe die drei Interviews zu einer SQL-Frage nicht bestanden - SQL-Leistungsoptimierung

Ganz links stehende Übereinstimmung: Wenn Ihre SQL-Anweisung in einem kombinierten Index den ganz links stehenden Index im kombinierten Index verwendet, kann diese SQL-Anweisung diesen kombinierten Index für die Übereinstimmung verwenden. Wenn eine Bereichsabfrage (>, <, zwischen, wie) gefunden wird, wird die Übereinstimmung beendet.

select * from t where a=1 and b=1 and c =1; #Auf diese Weise können Sie den definierten Index (a,b,c) verwenden und a,b,c verwenden
select * from t where a=1 and b=1; #Auf diese Weise können Sie den definierten Index (a,b,c) verwenden und a,b verwenden
select * from t where b=1 and a=1; #Auf diese Weise können Sie die definierten Indizes (a, b, c) verwenden und a und c verwenden (MySQL hat einen Abfrageoptimierer)
select * from t where a=1; #Auf diese Weise können wir auch den definierten Index (a, b, c) verwenden, indem wir a
select * from t where b=1 and c=1; #Die Verwendung definierter Indizes (a, b, c) ist nicht zulässig.
select * from t where a=1 and c=1; #Auf diese Weise können die definierten Indizes (a, b, c) verwendet werden, aber nur Index a wird verwendet, die Indizes b und c werden nicht verwendet

Index Pushdown: Auch Index Condition Pushdown (ICP) genannt, ist eine von MySQL bereitgestellte Methode, um einen bestimmten Index zu verwenden, um Tupel aus einer bestimmten Tabelle zu erhalten. Beachten Sie, dass wir hier bewusst „eins“ hervorgehoben haben, da eine solche Indexoptimierung nicht für Mehrtabellenverbindungen, sondern für Einzeltabellenscans verwendet wird. Genauer gesagt handelt es sich um eine Möglichkeit, eine einzelne Tabelle mithilfe eines Indexes zu scannen, um Daten zu erhalten.

1.5 Vom Index verwendete Datenstruktur

1.5.1 Hash-Tabelle

Mangel︰

1. Wenn Hash-Speicher verwendet wird, müssen alle Datendateien dem Speicher hinzugefügt werden, was mehr Speicherplatz verbraucht.

2. Wenn alle Abfragen gleichwertige Abfragen sind, ist Hashing tatsächlich sehr schnell. In Unternehmen oder tatsächlichen Arbeitsumgebungen werden jedoch mehr Daten innerhalb eines Bereichs durchsucht als gleichwertige Abfragen, sodass Hashing nicht sehr geeignet ist.

1.5.2 Binärer Baum

Nachteile:

Unabhängig davon, ob es sich um einen Binärbaum oder einen Rot-Schwarz-Baum handelt, erhöht die Tiefe des Baums die Anzahl der E/A-Vorgänge und beeinträchtigt die Effizienz des Datenlesens.

1.5.3 B+ Baum

B-Baum-Funktionen:

1. Alle Schlüsselwerte sind im gesamten Baum verteilt

2. Die Suche kann an einem Nicht-Blattknoten enden, und es wird eine Suche im gesamten Schlüsselwortsatz durchgeführt, wobei die Leistung der einer binären Suche nahe kommt.

3. Jeder Knoten hat höchstens m Teilbäume

4. Der Wurzelknoten hat mindestens 2 Teilbäume

5. Ein Verzweigungsknoten hat mindestens m/2 Teilbäume (alle Knoten außer dem Wurzelknoten und dem Blattknoten sind Verzweigungsknoten)

6. Alle Blattknoten befinden sich auf derselben Ebene, jeder Knoten kann höchstens m-1 Schlüssel haben und sie sind in aufsteigender Reihenfolge angeordnet

Beispiel einer Diagrammbeschreibung:

Jeder Knoten belegt einen Plattenblock. Ein Knoten hat zwei aufsteigende Schlüsselwörter und drei Zeiger auf den Stammknoten des Unterbaums. Der Zeiger speichert die Adresse des Plattenblocks, in dem sich der untergeordnete Knoten befindet. Die drei durch die beiden Schlüsselwörter unterteilten Bereichsdomänen entsprechen den Bereichsdomänen der Daten der Teilbäume, auf die die drei Zeiger zeigen. Am Beispiel des Stammknotens lauten die Schlüsselwörter 16 und 34, der Datenbereich des Teilbaums, auf den der Zeiger P1 zeigt, ist kleiner als 16, der Datenbereich des Teilbaums, auf den der Zeiger P2 zeigt, ist 16 bis 34, und der Datenbereich des Teilbaums, auf den der Zeiger P3 zeigt, ist größer als 34.

Ablauf der Stichwortsuche:

  1. Suchen Sie Datenträgerblock 1 basierend auf dem Stammknoten und lesen Sie ihn in den Speicher. [Festplatten-E/A-Vorgang zum ersten Mal]
  2. Vergleichen Sie Schlüsselwort 28 im Intervall (16,34) und suchen Sie den Zeiger P2 des Festplattenblocks 1.
  3. Suchen Sie Datenträgerblock 3 gemäß dem P2-Zeiger und lesen Sie ihn in den Speicher. [Festplatten-E/A-Vorgang zum 2. Mal]
  4. Vergleichen Sie Schlüsselwort 28 im Intervall (25,31) und suchen Sie den Zeiger P2 des Festplattenblocks 3.
  5. Suchen Sie den Datenträgerblock 8 gemäß dem P2-Zeiger und lesen Sie ihn in den Speicher. [3. Festplatten-E/A-Vorgang]
  6. Suchen Sie in der Schlüsselwortliste im Datenträgerblock 8 nach Schlüsselwort 28.

Mangel:

  • Jeder Knoten hat einen Schlüssel und enthält auch Daten. Der Speicherplatz jeder Seite ist jedoch begrenzt. Wenn die Daten groß sind, verringert sich die Anzahl der in jedem Knoten gespeicherten Schlüssel.
  • Wenn die Menge der gespeicherten Daten groß ist, ist auch die Tiefe groß, was die Anzahl der Festplatten-E/A-Vorgänge während der Abfrage erhöht und somit die Abfrageleistung beeinträchtigt.

1.6 Index-Matching-Methode

Vollständige Wertübereinstimmung: Vollständige Wertübereinstimmung bezieht sich auf die Übereinstimmung aller Spalten im Index.

Erläutern Sie „select * from staffs“, wobei „Name“ = „Juli“ und „Alter“ = „23“ und „Position“ = „Entwickler“ ist.

Passt zum äußersten linken Präfix: Passt nur zu den ersten paar Spalten

Erläutern Sie „Select * from Staffs“, wobei Name = „Juli“ und Alter = „23“ ist.

Erläutern Sie „Select * from Staffs“, wobei „Name“ = „Juli“ ist.

Spaltenpräfix abgleichen: Sie können den Anfang eines Spaltenwerts abgleichen.

Erklären Sie „Select * from Staffs“, wo der Name beispielsweise „J%“ lautet.

Erläutern Sie „select * from staffs where name like '%y'“;

Bereichswert abgleichen: Sie können nach Daten innerhalb eines bestimmten Bereichs suchen.

Erklären Sie „Select * from Staffs where Name > ‚Mary‘“;

Genaue Übereinstimmung mit einer Spalte und Bereichsübereinstimmung mit einer anderen Spalte: Sie können die gesamte erste Spalte und einen Teil der zweiten Spalte abfragen.

Erläutern Sie „Select * from Staffs“, wobei Name = „Juli“ und Alter > 25 ist.

Nur-Index-Abfragen: Bei der Abfrage muss nur auf den Index zugegriffen werden, nicht auf Datenzeilen. Dies ist im Wesentlichen ein abdeckender Index.

Erläutern Sie „select name, age, pos from staffs where name = ,Juli‘ und age = 25 und pos = ,dev‘“.

2. Hash-Index

Basierend auf der Implementierung von Hash-Tabellen sind nur Abfragen gültig, die genau mit allen Spalten des Index übereinstimmen

In MySQL unterstützt nur die Speicher-Engine explizit Hash-Indizes.

Der Hash-Index selbst muss nur den entsprechenden Hash-Wert speichern, daher ist die Indexstruktur sehr kompakt, was die Hash-Indexsuche sehr schnell macht.

2.1 Einschränkungen von Hash-Indizes

  1. Ein Hash-Index enthält nur Hash-Werte und Zeilenzeiger, speichert jedoch keine Feldwerte. Der Index kann die Werte im Index nicht verwenden, um das Lesen von Zeilen zu vermeiden.
  2. Hash-Indexdaten werden nicht in der Reihenfolge der Indexwerte gespeichert und können daher nicht sortiert werden.
  3. Hash-Indizes unterstützen keine partielle Spaltenübereinstimmung. Hash-Indizes verwenden den gesamten Inhalt der Indexspalte, um den Hash-Wert zu berechnen.
  4. Hash-Indizes unterstützen weder Gleichheitsvergleichsabfragen noch Bereichsabfragen.
  5. Der Zugriff auf hashindexierte Daten ist sehr schnell, es sei denn, es gibt viele Hash-Konflikte. Wenn ein Hash-Konflikt auftritt, muss die Speicher-Engine alle Zeilenzeiger in der verknüpften Liste durchlaufen und sie Zeile für Zeile vergleichen, bis alle qualifizierten Zeilen gefunden sind.
  6. Wenn es viele Hash-Konflikte gibt, sind die Wartungskosten sehr hoch

2.2 Beispiele

Wenn Sie eine große Anzahl von URLs speichern und select id from url where url=""

Sie können auch select id fom url where url="" and url_crc=CRC32("")

Diese Abfrage weist eine hohe Leistung auf, da für die Suche ein sehr kleiner Index verwendet wird.

3. Zusammengesetzter Index

Beim Einbeziehen mehrerer Spalten als Indizes ist zu beachten, dass die richtige Reihenfolge von der Abfrage des Index abhängt. Außerdem müssen Sie überlegen, wie Sie den Anforderungen hinsichtlich Sortierung und Gruppierung besser gerecht werden können.

Beispiel: Erstellen Sie einen zusammengesetzten Index a, b, c und verwenden Sie den Index in verschiedenen SQL-Anweisungen


Stellungnahmen Funktioniert der Index?
wobei a = 3 Ja, nur ein
wobei a=3 und b=5 Ja, a und b werden verwendet.
wobei a =3 und b = 5 und c = 4 Ja, a, b, c werden verwendet
wobei a = 3 oder c = 4 NEIN
wobei a = 3 und c = 4 Ja, nur ein
wobei a = 3 und b > 10 und c = 7 Ja, a und b werden verwendet.
wobei a = 3 und b wie '%mxn%' und c=7 Verwendet ein

4. Clustered-Index und Nicht-Clustered-Index

4.1 Clustered-Index

Es handelt sich nicht um einen separaten Indextyp, sondern um eine Datenspeichermethode. Dies bedeutet, dass Datenzeilen und benachbarte Schlüsselwerte kompakt zusammen gespeichert werden, wodurch Datenspeicher und Indizes zusammengeführt werden. Durch das Finden des Index werden auch die Daten gefunden.

Wenn kein Primärschlüssel definiert ist, wählt InnoDB stattdessen einen eindeutigen, nicht leeren Index. Wenn kein eindeutiger Index vorhanden ist, definiert InnoDB implizit einen Primärschlüssel als gruppierten Index. InnoDB clustert nur Datensätze innerhalb derselben Seite. Seiten mit benachbarten Schlüsselwerten können weit voneinander entfernt sein.

4.2 Nicht gruppierte Indizes

Die Datendatei wird getrennt von der Indexdatei gespeichert, und die Daten werden in einer vom Index getrennten Struktur gespeichert. Der Blattknoten der Indexstruktur zeigt auf die entsprechende Zeile der Daten. MyISAM speichert den Index über key_buffer im Speicher zwischen. Wenn auf die Daten zugegriffen werden muss (Zugriff über den Index), wird der Index direkt im Speicher durchsucht, und dann werden die entsprechenden Daten auf der Festplatte über den Index gefunden. Aus diesem Grund ist die Geschwindigkeit langsam, wenn der Index nicht im Schlüsselpuffer gefunden wird.

Die Daten auf der Datenseite werden über den Blattknotenzeiger gefunden, sodass der nicht gruppierte Index in logischer Reihenfolge vorliegt

5. Abdeckungsindex

5.1 Grundlegende Einführung

  1. Wenn ein Index die Werte aller abzufragenden Felder enthält, nennen wir ihn einen überdeckenden Index.
  2. Nicht alle Indextypen können als abdeckende Indizes bezeichnet werden. Abdeckende Indizes müssen die Werte der Indexspalten speichern.
  3. Verschiedene Speicher implementieren das Überdecken von Indizes auf unterschiedliche Weise. Nicht alle Engines unterstützen das Überdecken von Indizes. Der Arbeitsspeicher unterstützt das Überdecken von Indizes nicht.

5.2 Vorteile

1. Indexeinträge sind normalerweise viel kleiner als die Größe von Datenzeilen. Wenn Sie nur den Index lesen müssen, reduziert MySQL die Datenzugriffe erheblich.

2. Da der Index in der Reihenfolge der Spaltenwerte gespeichert wird, ist der IO-Aufwand bei IO-intensiven Bereichsabfragen wesentlich geringer als beim zufälligen Lesen jeder einzelnen Datenzeile von der Festplatte.

3. Einige Speicher-Engines wie MYISAM speichern Indizes nur im Speicher und verlassen sich beim Zwischenspeichern der Daten auf das Betriebssystem. Daher ist zum Zugriff auf die Daten ein Systemaufruf erforderlich, was zu schwerwiegenden Leistungsproblemen führen kann.

4. Covering-Indizes sind besonders nützlich für INNODB-Tabellen aufgrund der Clustered-Indizes von INNODB

5.3 Falldemonstration

1. Wenn eine durch einen Index abgedeckte Abfrage initiiert wird, können die verwendeten Indexinformationen in der zusätzlichen Erläuterungsspalte angezeigt werden. Zu diesem Zeitpunkt wird der abdeckende Index verwendet.

2. In den meisten Speicher-Engines können abdeckende Indizes nur Abfragen abdecken, die nur auf einige Spalten im Index zugreifen. Eine weitere Optimierung ist jedoch möglich, indem zur Abdeckung der Abfrage der sekundäre Index von InnoDB verwendet wird.

Beispielsweise verwendet actor die Speicher-Engine innodb und verfügt über einen sekundären Index für das Feld last_name. Obwohl die Spalten dieses Indexes den Primärschlüssel actor_id nicht enthalten, kann er auch verwendet werden, um eine übergeordnete Abfrage für actor_id durchzuführen.

6. Optimieren Sie kleine Details

Vermeiden Sie bei der Verwendung von Indexspalten für Abfragen möglichst die Verwendung von Ausdrücken und platzieren Sie die Berechnungen in der Geschäftsebene statt in der Datenbankebene.

Versuchen Sie, Primärschlüsselabfragen anstelle anderer Indizes zu verwenden, da Primärschlüsselabfragen keine Tabellenabfragen auslösen.

Präfixindex verwenden

>Manchmal müssen Sie eine sehr lange Zeichenfolge indizieren, was den Index groß und langsam macht. Normalerweise können Sie am Anfang einer Spalte eine Teilzeichenfolge verwenden, was erheblich Indexplatz spart und die Indexeffizienz verbessert. Dies verringert jedoch die Selektivität des Index. Die Selektivität des Index bezieht sich auf das Verhältnis nicht wiederholter Indexwerte zur Gesamtzahl der Datensätze in der Datentabelle und reicht von 1/#T bis 1. Je höher die Selektivität des Indexes, desto höher die Abfrageeffizienz, da ein selektiverer Index es MySQL ermöglicht, bei der Suche mehr Zeilen herauszufiltern.

Im Allgemeinen ist die Selektivität eines Spaltenpräfixes hoch genug, um die Abfrageleistung zu erreichen, aber für Spalten vom Typ BLOB, TEXT und VARCHAR muss ein Präfixindex verwendet werden, da MySQL keine Indizierung der gesamten Länge dieser Spalten zulässt. Der Trick bei der Verwendung dieser Methode besteht darin, ein Präfix zu wählen, das lang genug ist, um eine hohe Selektivität zu gewährleisten, aber nicht zu lang.

--Erstellen Sie eine Datentabelle create table citydemo(city varchar(50) not null);
in citydemo(city) einfügen, Stadt aus Stadt auswählen;

-- Wiederholen Sie die folgende SQL-Anweisung fünfmal: insert into citydemo(city) select city from citydemo;

--Aktualisieren Sie den Namen der Stadttabelle. Update Citydemo Set City = (Wählen Sie eine Stadt aus der Stadtreihenfolge nach Rand () aus, Limit 1);

--Suchen Sie die am häufigsten vorkommende Städteliste und stellen Sie fest, dass jeder Wert 45-65 Mal vorkommt.
Wählen Sie Anzahl(*) als Anzahl, Stadt aus Citydemo, gruppieren Sie nach Stadt, sortieren Sie nach Anzahl, Abstiegslimit 10;

--Suchen Sie das am häufigsten vorkommende Städtepräfix, beginnend mit den 3 Präfixbuchstaben, und stellen Sie fest, dass es häufiger vorkommt als zuvor. Sie können mehrere Zeichen abfangen, um zu sehen, wie oft die Stadt vorkommt. select count(*) as cnt,left(city,3) as pref from citydemo group by pref order by cnt desc limit 10;
Wähle Anzahl(*) als Anzahl, links(Stadt, 7) als Präferenz aus der Citydemo-Gruppe nach Präferenz, sortiere nach Anzahl, Abstiegsgrenze 10;
--An diesem Punkt liegt die Selektivität des Präfixes nahe an der Selektivität der gesamten Spalte--Sie können auch eine andere Methode verwenden, um die Selektivität der gesamten Spalte zu berechnen. Sie können sehen, dass, wenn die Präfixlänge 7 erreicht, die Selektivitätsverbesserung sehr gering ist, wenn die Präfixlänge erhöht wird. select count(distinct left(city,3))/count(*) as sel3,
Anzahl(deutlich links(Stadt,4))/Anzahl(*) als sel4,
Anzahl(deutlich links(Stadt,5))/Anzahl(*) als sel5,
Anzahl(deutlich links(Stadt,6))/Anzahl(*) als sel6,
Anzahl(deutlich links(Stadt,7))/Anzahl(*) als sel7,
Anzahl(unterschiedliche Links(Stadt,8))/Anzahl(*) als sel8 
von Citydemo;

--Nachdem die Berechnung abgeschlossen ist, können Sie einen Präfixindex erstellen. Alter Table Citydemo Add Key (City (7)).

--Hinweis: Ein Präfixindex ist eine effektive Möglichkeit, den Index kleiner und schneller zu machen, hat aber auch Nachteile: MySQL kann keinen Präfixindex für „Order by“ und „Group by“ verwenden. 

Verwenden Sie den Index-Scan zum Sortieren

MySQL bietet zwei Möglichkeiten, geordnete Ergebnisse zu erzeugen: durch Sortieren oder durch Scannen in Indexreihenfolge. Wenn der Wert der Typspalte in „explain“ Index ist, bedeutet dies, dass MySQL zum Sortieren Indexscannen verwendet.
Das Scannen des Indexes selbst geht schnell, weil man nur von einem Indexdatensatz zum unmittelbar nächsten Datensatz wechseln muss. Wenn der Index jedoch nicht alle für die Abfrage erforderlichen Spalten abdeckt, muss bei jedem Scannen eines Indexdatensatzes die entsprechende Zeile in der Tabelle zurückgefragt werden. Dies ist im Grunde genommen zufälliger IO-Vorgang, sodass das Lesen von Daten in Indexreihenfolge normalerweise langsamer ist als ein sequentieller vollständiger Tabellenscan.
MySQL kann denselben Index zum Sortieren und Suchen von Zeilen verwenden. Wenn möglich, sollte der Index so gestaltet sein, dass er beide Aufgaben erfüllt.
MySQL kann den Index nur dann zum Sortieren der Ergebnisse verwenden, wenn die Reihenfolge der Indexspalten genau der Reihenfolge der Order-by-Klausel entspricht und alle Spalten auf die gleiche Weise sortiert sind. Wenn die Abfrage mehrere Tabellen verknüpfen muss, kann der Index nur dann zum Sortieren verwendet werden, wenn alle von der Order-by-Klausel referenzierten Felder aus der ersten Tabelle stammen. Die Einschränkungen der Order-By-Klausel sind dieselben wie bei der Suchanfrage. Das am weitesten links stehende Präfix des Index muss erfüllt sein. Andernfalls muss MySQL sequenzielle Operationen ausführen und kann den Index nicht zum Sortieren verwenden.

union all, in oder können Indizes verwenden, aber in wird empfohlen.

Bereichsspalten können Indizes verwenden. Die Bereichsbedingungen sind: <, >. Bereichsspalten können Indizes verwenden, aber Spalten, die der Bereichsspalte folgen, können keine Indizes verwenden. Ein Index kann höchstens für eine Bereichsspalte verwendet werden.

Bei erzwungener Typkonvertierung wird die gesamte Tabelle gescannt

Tabelle erstellen Benutzer (ID int, Name varchar (10), Telefon varchar (11));
Tabelle ändern, Benutzerindex hinzufügen, idx_1 (Telefon);
erläutern Sie „select * from user where phone=13800001234;“ (löst den Index nicht aus)
Erläutern Sie „select * from user where phone='13800001234'; (Triggerindex)“

Es ist nicht ratsam, Indizes für Felder zu erstellen, die häufig aktualisiert werden und eine geringe Datendifferenzierung aufweisen.

Durch Updates wird der B+-Baum geändert. Die Indizierung wird für Felder empfohlen, die häufig aktualisiert werden, da dies die Datenbankleistung erheblich reduziert.
Für Attribute wie das Geschlecht, die sich nicht sehr unterscheiden, ist die Erstellung eines Indexes sinnlos und die Daten können damit nicht wirksam gefiltert werden.
Im Allgemeinen kann ein Index erstellt werden, wenn die Diskrepanz über 80 % liegt. Die Diskrepanz kann mit count(distinct(column name))/count(*) berechnet werden.

Die Spalte zum Erstellen eines Indexes lässt keine Nullwerte zu, was zu unerwarteten Ergebnissen führen kann.

Wenn Sie Tabellen verknüpfen müssen, sollten Sie am besten nicht mehr als drei Tabellen verwenden, da die zu verknüpfenden Felder denselben Datentyp aufweisen müssen.

Verwenden Sie, wann immer möglich, ein Limit

Es wird empfohlen, die Anzahl der Indizes einer einzelnen Tabelle auf 5 oder weniger zu begrenzen.

Die Anzahl der einzelnen Indexfelder darf 5 nicht überschreiten (kombinierter Index).

Beim Erstellen eines Index sollten Sie die folgenden Missverständnisse vermeiden:

> Je mehr Indizes, desto besser (falsch)

> Vorzeitige Optimierung, Optimierung ohne Verständnis des Systems (Fehler)

Zusammenfassen

Dies ist das Ende dieses Artikels über Tipps zum Wissen über MySQL-Indizes. Weitere relevante Inhalte zum Wissen über 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:
  • So verwalten Sie MySQL-Indizes und Datentabellen
  • Vollständige Schritte zum Erstellen eines Hochleistungsindex in MySQL
  • Was Sie über das Erstellen von MySQL-Indizes wissen müssen
  • MySQL-Abfrage redundanter Indizes und ungenutzter Indexoperationen
  • Detaillierte Erklärung des Unterschieds zwischen MySQL-Normalindex und eindeutigem Index
  • Eine kurze Diskussion darüber, welche Felder in Mysql für die Indizierung geeignet sind
  • Detaillierte Untersuchung des MySQL-Verbundindex
  • mysql Index hinzufügen mysql wie man einen Index erstellt
  • Zusammenfassung der MySQL-Indextypen sowie Tipps und Vorsichtsmaßnahmen bei der Verwendung
  • MySQL Create Index-Methode, Syntaxstruktur und Beispiele
  • MySQL Leistungsoptimierung Indexoptimierung
  • Analyse der Verbindung und des Unterschieds zwischen MySQL-Primärschlüssel und -Index
  • So erstellen Sie einen Tabellenindex in MySQL

<<:  Detaillierte Erklärung zum Javascript-Event-Bubbling, Event-Capture und Event-Delegation

>>:  Erstellen eines FastDFS-Dateisystems in Docker (Tutorial mit mehreren Images)

Artikel empfehlen

Detaillierte Erläuterung des Mysql Self-Join-Abfragebeispiels

Dieser Artikel beschreibt die Mysql-Self-Join-Abf...

Detaillierte Erklärung der HTML-Formularelemente (Teil 1)

HTML-Formulare werden verwendet, um verschiedene ...

Detaillierte Hinweise zu React für Einsteiger

Inhaltsverzeichnis 1. Grundlegendes Verständnis v...

Grundsätze für die Bereitstellung und Konfiguration mehrerer Tomcat-Instanzen

1. Schalten Sie die Firewall aus und übertragen S...

mysql drei Tabellen verbunden, um eine Ansicht zu erstellen

Drei Tabellen sind miteinander verbunden. Feld a ...

js realisiert die Funktion zum Klicken zum Wechseln der Karte

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der Wissenspunkte zu den Linux-Befehlen ps und pstree

Der ps-Befehl in Linux ist die Abkürzung für „Pro...