MySQL ermöglicht das Erstellen mehrerer Indizes für dieselbe Spalte. Ob beabsichtigt oder unbeabsichtigt, MySQL muss doppelte Indizes separat verwalten, und der Optimierer muss sie bei der Optimierung von Abfragen auch einzeln berücksichtigen, was sich auf die Leistung auswirkt. Doppelte Indizes beziehen sich auf Indizes desselben Typs, die für dieselben Spalten in derselben Reihenfolge erstellt wurden. Sie sollten die Erstellung doppelter Indizes auf diese Weise vermeiden und diese sofort löschen, wenn Sie welche finden. Es ist jedoch möglich, verschiedene Indextypen für dieselbe Spalte zu erstellen, um unterschiedliche Abfrageanforderungen zu erfüllen. CREATE TABLE-Test ( ID INT NICHT NULL PRIMÄRSCHLÜSSEL, Ein INT NOT NULL, B INT NICHT NULL, EINZIGARTIGE ID, INDEX(ID), )ENGINE=InnoDB; Dieses SQL erstellt drei doppelte Indizes. Normalerweise besteht hierfür kein Grund. Es gibt einige Unterschiede zwischen redundanten und doppelten Indizes. Wenn Sie einen Index (a, b) erstellen, ist das Erstellen eines Index (a) ein redundanter Index, da es sich nur um einen Präfixindex des vorherigen Index handelt. Daher kann (a, b) auch als (a) verwendet werden, aber (b, a) ist kein redundanter Index, und Index (b) ist auch nicht redundant, da b nicht die am weitesten links stehende Präfixspalte des Index (a, b) ist. Darüber hinaus sind andere unterschiedliche Indextypen, die auf denselben Spalten erstellt werden (z. B. Hash-Indizes und Volltext-Indizes), keine redundanten Indizes von B-Tree-Indizes, unabhängig von den abgedeckten Indexspalten. Redundante Indizes treten normalerweise auf, wenn einer Tabelle neue Indizes hinzugefügt werden. Beispielsweise könnte man einen neuen Index (A,B) hinzufügen, anstatt den vorhandenen Index (A) zu erweitern. Ein anderer Fall ist die Erweiterung eines Index auf (A, ID), wobei ID der Primärschlüssel ist. Bei InnoDB ist der Primärschlüssel bereits im Sekundärindex enthalten, daher ist dies ebenfalls redundant. In den meisten Fällen sind redundante Indizes nicht erforderlich. Sie sollten versuchen, vorhandene Indizes zu erweitern, anstatt neue zu erstellen. Manchmal sind redundante Indizes jedoch aus Leistungsgründen erforderlich, da die Erweiterung eines vorhandenen Indexes dazu führt, dass dieser zu groß wird und sich somit auf die Leistung anderer Abfragen auswirkt, die den Index verwenden. Wenn Sie beispielsweise einen Index für eine Integer-Spalte haben und nun eine besonders lange varchar-Spalte hinzufügen müssen, um den Index zu erweitern, kann die Leistung erheblich sinken, insbesondere wenn es Abfragen gibt, die diesen Index als überlagernden Index verwenden, oder wenn es sich um eine MyISAM-Tabelle handelt und viele Bereichsabfragen vorhanden sind (aufgrund der MyISAM-Präfixkomprimierung). Beispielsweise gibt es eine Userinfo-Tabelle. Diese Tabelle enthält 1.000.000 Datensätze, mit ungefähr 20.000 Datensätzen für jeden State_ID-Wert. Es gibt einen Index für state_id, daher heißt das folgende SQL Q1 SELECT count(*) FROM Benutzerinfo WHERE state_id=5; --Q1 Die Abfrageausführungsgeschwindigkeit beträgt etwa 115 Abfragen pro Sekunde (QPS). Es gibt ein weiteres SQL, nennen wir es Q2 Wählen Sie state_id, Stadt, Adresse aus Benutzerinfo, wo state_id = 5; --Q2 Die QPS dieser Abfrage beträgt 10. Die einfachste Möglichkeit, die Leistung dieses Indexes zu verbessern, besteht darin, einen Wild War-Index von (state_id, city, address) zu verwenden, damit der Index die Abfrage abdecken kann: ALERT TABLE Benutzerinfo ADD KEY state_id_2(state_id,city,address); Hinweis: state_id hat bereits einen Index. Gemäß dem vorherigen Konzept ist dies ein redundanter Index und kein doppelter Index.) Wie findet man redundante und doppelte Indizes? 1. Sie können einige Ansichten in Shlomi Noachs common_schema verwenden, um es zu finden. common_schema ist ein Satz aus gemeinsamem Speicher und Ansichten, die auf dem Server installiert werden können. 2. Sie können pt_duplicate-key-checker im Percona Toolkit verwenden, das die Tabellenstruktur analysiert, um redundante und doppelte Indizes zu finden. Zusammenfassen Dies ist der gesamte Inhalt dieses Artikels zur detaillierten Erläuterung redundanter und doppelter Indizes in MySQL. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können sich auf Folgendes beziehen: Mehrere wichtige MySQL-Variablen, eine kurze Beschreibung des Unterschieds zwischen Redis und MySQL, Beispielanalyse zur Optimierung von MySQL-Unterabfragen und verschachtelten Abfragen usw. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht und weisen Sie darauf hin. Der Herausgeber wird Ihnen rechtzeitig antworten und Änderungen vornehmen. Vielen Dank, Freunde, für Ihre Unterstützung dieser Site! Das könnte Sie auch interessieren:
|
<<: Vue implementiert das Umschalten des Anmeldetyps
Nachdem Sie VMware installiert und eine neue virt...
Die dekomprimierte Version von mysql5.7.18 starte...
Verwendung von „haben“ Mit der Having-Klausel kön...
Die Implementierungsidee des Javascript-Spiels Sn...
Inhaltsverzeichnis 1. Projektordnerstruktur 1. As...
Die Attribute des <TR>-Tags werden verwende...
In der heutigen Entwicklungsumgebung ist schnell ...
Ich spiele in letzter Zeit mit Big Data. Ein Freu...
Inhaltsverzeichnis 1. Wir müssen sicherstellen, d...
Einführung MySQL bietet einen EXPLAIN-Befehl, der...
Formatkodierung 1. Bitte stellen Sie die Seitenbr...
Problemhintergrund: Wenn Sie Docker zum Bereitste...
Das dürfte etwas sein, was viele Leute gemacht ha...
Inhaltsverzeichnis Vorwort Optimierung Variablen ...
Lassen Sie uns die Funktion von Taobao nachahmen,...