Hintergrund Da es in letzter Zeit häufig zu Problemen mit der Systemleistung durch langsame SQL-Anweisungen kam, haben wir uns entschlossen, die Indizes zu optimieren. Einige Tabellenstrukturen haben bereits viele Indizes. Wenn Sie weiterhin Indizes hinzufügen, wirkt sich dies zwangsläufig auf die Leistung beim Einfügen von Daten aus. Ist es also möglich, dieses Ziel mithilfe eines kombinierten Index zu erreichen? Lassen Sie es uns in diesem Artikel herausfinden. Zusammengesetzte Indizes verstehen Wenn in der Where-Bedingung mehrere Felder verwendet werden und mehrere Felder indiziert werden müssen, können Sie die Verwendung eines zusammengesetzten Indexes in Erwägung ziehen. Wenn Sie beispielsweise nach einer Adresse suchen, müssen Sie die Provinz und die Stadt eingeben. Wenn dann ein Index für die Provinz und die Stadt erstellt wird, verbessert sich die Abfragegeschwindigkeit bei großen Datenmengen erheblich. Was sind die Vorteile kombinierter Indizes?
Mangel:
Empfehlungen zur Verwendung zusammengesetzter Indizes: Eine einzelne Tabelle sollte nicht mehr als einen zusammengesetzten Index haben und ein einzelner zusammengesetzter Index sollte nicht mehr als drei Felder haben. Bei Überschreitung muss die Notwendigkeit und die Möglichkeit anderer Alternativen geprüft werden. Prinzip der Übereinstimmung ganz links Zusammengesetzte Indizes folgen dem Prinzip der Übereinstimmung ganz links. Wie der Name schon sagt, wird in einem zusammengesetzten Index zuerst das Feld ganz links abgeglichen. Daher wird beim Erstellen eines zusammengesetzten Indexes das am häufigsten verwendete Feld in der Where-Klausel ganz links im zusammengesetzten Index platziert. Der Hilfsindex wird durch einen B+-Baum implementiert. Obwohl mehrere Spalten angegeben werden können, ist die Vergleichspriorität jeder Spalte unterschiedlich, und die davor geschriebene hat eine höhere Priorität. Sobald eine Auslassung auftritt, kann die Suche im B+-Baum nicht fortgesetzt werden (es sei denn, das Problem wird durch Maßnahmen wie das Ausfüllen der Lücken behoben). Daher wird die Suche entsprechend der am weitesten links stehenden kontinuierlichen Übereinstimmung durchgeführt. Da die Suche auf einem B+-Baum erfolgt, ist für den Vergleich der Bedingungen natürlich eine exakte Übereinstimmung (also "=" und "IN") erforderlich. In der Where-Klausel werden zwei Felder c1 und c2 verwendet. Soll beim Erstellen eines Index die Reihenfolge der beiden Felder (c1, c2) oder (c2, c1) sein? Der richtige Ansatz besteht darin, denjenigen mit den am wenigsten wiederholten Werten an den Anfang zu stellen. Wenn beispielsweise 95 % der Werte eindeutig sind, können Sie erwägen, diese an den Anfang zu stellen. Auswirkung der Feldreihenfolge Der zusammengesetzte Index folgt dem Übereinstimmungsprinzip „ganz links“. Müssen die Felder in den Where-Abfragebedingungen also auch in der Reihenfolge des Index geschrieben werden? wähle * aus t_user, wobei c1 = 1 und c2 = 4; Wählen Sie * aus t_user, wobei c2 = 4 und c1 = 1; Ich habe einen Artikel gelesen, in dem behauptet wird, die erste SQL-Anweisung sei effizienter. Ist das glaubwürdig? Die beiden Abfragemethoden haben die gleichen Bedingungen und die Ergebnisse sollten gleich sein. Normalerweise lässt MySQL sie denselben Index verwenden. Durch die Analyse der beiden obigen Anweisungen mit dem Abfrageoptimierer von MySQL können wir feststellen, dass die Ausführungspläne genau gleich sind. Mit anderen Worten, die Reihenfolge der Felder in der SQL-Anweisung muss nicht mit der Reihenfolge der zusammengesetzten Indexfelder übereinstimmen, und der Abfrageoptimierer passt die Reihenfolge automatisch an. Wenn es Auswirkungen auf die Effizienz gibt, handelt es sich wahrscheinlich um Auswirkungen der Korrekturreihenfolge des Abfrageoptimierers, die nahezu vernachlässigbar sind. Kann ein einzelnes Feld einen Index auslösen? Bei einem zusammengesetzten Index von (c1, c2, c3), der drei Indizes (c1), (c1, c2) und (c1, c2, c3) entspricht, ist es offensichtlich, dass der Index verwendet wird, wenn in der Abfragebedingung nur c1 vorhanden ist. von t_user, wobei c2 = 4; Wird die obige Anweisung den Index durchlaufen? Dies kann durch mehrere Situationen erklärt werden. Erläutern Sie „select * from t_user“, wobei c1 = 1; Der Indextyp der obigen Anweisung ist: ref. Der Ref-Typ bedeutet, dass MySQL basierend auf einem bestimmten Algorithmus schnell den Index findet, der die Bedingungen erfüllt, ohne jedes einzelne Datenstück im Index zu scannen und zu beurteilen. Um Daten schnell zu finden, muss dieser Indextyp bestimmte Datenstrukturen erfüllen. Erklären Sie „Select c2 from t_user“, wobei c2 = 4; Der Indextyp der obigen Anweisung ist: Index. Der Indextyp bedeutet, dass MySQL den gesamten Index scannt. Solange es sich um einen Index oder einen Teil eines Index handelt, kann MySQL ihn im Indextyp scannen. Da die Daten bei dieser Methode einzeln gesucht werden, ist die Leistung nicht besonders hoch. In diesem Beispiel gibt es bestimmte Anforderungen an die abgefragten Felder. Die Bedingung in „where“ ist c2, und das in „select“ abgefragte Feld kann nur c2 sein, daher wird der Indextyp „index“ verwendet. Wenn c2 durch * oder andere Felder ersetzt wird: Erklären Sie „Select * from t_user“, wobei c2 = 4; Die obige Anweisung stellt fest, dass der Index nicht mehr verwendet wird, aber ein vollständiger Tabellenscan durchgeführt wird. Dies erklärt auch, warum MySQL dem Prinzip der äußersten linken Übereinstimmung folgt. Kann ein zusammengesetzter Index einen einzelnen Index ersetzen? Einzelindex: (c1), zusammengesetzter Index: (c1, c2). Wenn c1 als Abfragebedingung verwendet wird, ist die Abfragegeschwindigkeit eines einzelnen Indexes fast dieselbe wie die eines zusammengesetzten Indexes oder sogar etwas schneller als die eines zusammengesetzten Indexes. Zusammenfassung Dieser Artikel fasst einige Wissenspunkte zusammen, die Sie bei der Verwendung von MySQL-Verbundindizes beachten müssen. Bei der Verwendung können Sie mithilfe von „explain“ überprüfen, ob Ihre SQL-Anweisung den Index verwendet und welchen Index sie verwendet. Dies ist das Ende dieses Artikels über die Funktionsweise des MySQL-Verbundindex. Weitere Informationen zum MySQL-Verbundindex finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Lösen Sie das Problem der Inkonsistenz zwischen MySQL-Zeit und Systemzeit in Docker
>>: Detaillierte Erklärung der Kernfunktionen und der Ereignisbehandlung von jQuery
Laden Sie zunächst eine Reihe von Dingen aus der ...
Linux findet ein bestimmtes Programm, wo ist Der ...
MVCC MVCC (Multi-Version Concurrency Control) ist...
Auch heute noch sind Taskleistensymbole ein magis...
1. Grundkenntnisse (Methoden von Datumsobjekten) ...
Verwenden Sie JS, um ein zufälliges Namensaufrufs...
1. SSH-Remoteverwaltung SSH-Definition SSH (Secur...
Modulares Cocos Creator-Skript Mit Cocos Creator ...
1. Einleitung Ich möchte Selenium verwenden, um D...
Die Funktion isnull() kann nicht als Ersatz für N...
Der Link-In-Stil besteht darin, alle Stile in ein...
Inhaltsverzeichnis Hierarchie des Tomcat-Klassenl...
Was soll ich tun, wenn Linux nicht alle Befehle u...
Es gibt eine neue Funktion, die das Erfassen eine...