Dieser Artikel erläutert anhand von Beispielen das Konzept und die Verwendung der MySQL-Indexkardinalität. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: Kardinalität (Indexkardinalität) ist ein sehr wichtiges Konzept im MySQL-Index Die Indexkardinalität ist die Anzahl der unterschiedlichen Werte, die eine Spalte enthält. Wenn eine Datenspalte beispielsweise die Werte 1, 2, 3, 4, 5, 1 enthält, dann beträgt ihre Kardinalität 5. Ein Index funktioniert am besten, wenn seine Kardinalität im Verhältnis zur Anzahl der Zeilen in der Tabelle hoch ist (d. h. die Spalte enthält viele unterschiedliche Werte und wenige doppelte Werte). Wenn eine Spalte viele unterschiedliche Altersangaben enthält, kann der Index die Zeilen schnell unterscheiden. Wenn eine Spalte zur Aufzeichnung des Geschlechts verwendet wird (mit nur zwei Werten, „M“ und „W“), wäre ein Index nicht sehr nützlich. Wenn die Werte mit nahezu gleicher Wahrscheinlichkeit auftreten, ergibt die Suche nach jedem Wert die Hälfte der Zeilen. In diesen Fällen ist es am besten, überhaupt keinen Index zu verwenden, denn wenn der Abfrageoptimierer feststellt, dass ein bestimmter Wert in einem hohen Prozentsatz der Datenzeilen in der Tabelle vorkommt, ignoriert er den Index im Allgemeinen und führt einen vollständigen Tabellenscan durch. Der häufig verwendete Prozentwert liegt bei „30 %“. Ein weiteres Konzept heißt Indexselektivität Indexselektivität = Indexkardinalität/Gesamtdaten. Die Kardinalität kann über „Index aus Tabellenname anzeigen“ angezeigt werden. Hier ist eine Tabelle von mir. Die Datenmenge ist nicht groß, nur um die Indexselektivität zu testen Wählen Sie * aus Artikeln id Titel Name15 Titel 0 Großer Bär16 Titel 1 Großer Bär17 Titel 2 Großer Bär18 Titel 3 Großer Bär19 Titel 4 Großer Bär20 Titel 5 Großer Bär21 Titel 6 Großer Bär22 Titel 7 Großer Bär23 Titel 8 Zwei Bären24 Titel 9 Zwei Bären id ist der standardmäßige ganzzahlige Autoinkrement-Primärschlüssel Fügen Sie nun die Spalte „Autor“ als Index hinzu und zeigen Sie alle Indizes der Tabelle „Artikel“ an. ALTER TABLE `Artikel` ADD INDEX (`Autor`) INDEX VON Artikeln ANZEIGEN Tabelle nicht eindeutig Schlüsselname Sequenz im Index Spaltenname Sortierung Kardinalität Unterteil gepackt null Indextyp Artikel 0 PRIMARY 1 ID A 10 NULL NULL BTREE Artikel 1 Autor 1 Autor A 2 NULL NULL BTREE Erklären Sie die Bedeutung der einzelnen Felder
Wie Sie sehen, verfügt die Artikeltabelle bereits über zwei Indizes. Der ID-Index enthält keine doppelten Wörter. Der Name der Primärschlüsselspalte ist id. Die Indexkardinalität beträgt 10 in aufsteigender Reihenfolge. Es gibt keinen Teilindex. Es gibt keine Komprimierung. Es gibt kein Null. Die Speichermethode ist btree. Der Autorenindex enthält wiederholte Wörter. Der Indexname ist Autor. Der Spaltenname ist Autor. Der Index ist aufsteigend sortiert. Die Indexkardinalität ist 2. Es gibt keinen Teilindex. Es gibt keine Komprimierung. Es gibt keine Nullen. Die Speichermethode ist B-Tree. Gemäß dem Indexselektivitätsalgorithmus beträgt die ID-Indexselektivität 10/10 = 1 und die Autorindexselektivität 2/10 = 0,2. Lassen Sie uns das testen und „explain“ verwenden, um die Anweisungsanalyse anzuzeigen. Erklären Sie „select * from articles where id = 15“ id select_type Tabelle Partitionen Typ mögliche Schlüssel Schlüssel Schlüssellänge ref Zeilen gefiltert extra 1 EINFACHE Artikel NULL const PRIMARY PRIMARY 4 const 1 100,00 NULL Lassen Sie mich noch einmal über den Befehl „Explain“ sprechen. EXPLAIN zeigt, wie MySQL Indizes verwendet, um Auswahlanweisungen zu verarbeiten und Tabellen zu verknüpfen. Es kann dabei helfen, bessere Indizes auszuwählen und optimiertere Abfrageanweisungen zu schreiben. Erklären Sie die Bedeutung der einzelnen Felder 1. id SELECT-Kennung. Dies ist die SELECT-Abfragesequenznummer. Dies ist nicht wichtig. Die Abfragesequenznummer ist die Reihenfolge, in der die SQL-Anweisungen ausgeführt werden. 2. select_type Typ auswählen 2.1. SIMPLE Wenn Sie eine einfache Auswahlabfrage ausführen, die keine Union-Operation erfordert oder keine Unterabfrage enthält, ist der select_type der Antwortabfrageanweisung einfach. Unabhängig davon, wie komplex die Abfrageanweisung ist, darf im Ausführungsplan nur eine Unitabfrage mit dem einfachen select_type vorhanden sein. 3. Tabelle Tabellenname 4. Typverbindungstyp , es gibt mehrere Parameter, zunächst vom besten Typ bis zum schlechtesten Typ steht auch im Mittelpunkt dieses Artikels 4.1 const , die Tabelle hat höchstens eine übereinstimmende Zeile, const wird zum Vergleichen von Primärschlüsseln oder eindeutigen Indizes verwendet. Da nur eine Datenzeile abgeglichen wird, ist dies sehr schnell, was auch als optimal optimierter Index und konstante Suche verstanden werden kann. 5. Possible_keys gibt Hinweise, welcher Index zum Suchen der Zeile in der Tabelle verwendet wird, was nicht sehr wichtig ist 6. keys gibt den von der MySQL-Abfrage verwendeten Index an 7. key_len MySQL-Indexlänge 8. ref zeigt, welche Spalte oder Konstante zusammen mit dem Schlüssel verwendet wird, um Zeilen aus der Tabelle auszuwählen 9. Zeilen zeigen die Anzahl der Zeilen an, in denen MySQL die Abfrage ausführt. Je größer der Wert, desto schlechter ist es, was darauf hinweist, dass der Index nicht gut verwendet wird. 10. Extra Diese Spalte enthält detaillierte Informationen darüber, wie MySQL die Abfrage löst. Sie können sehen, dass die ID-Abfrage den ID-Index verwendet. Der Abfragetyp ist die optimale konstante Abfrage. Versuchen wir dann eine andere Abfrage, diesmal mit dem Autorenindex. Erklären Sie „Select * from articles where author = "Big Bear"“ 1 EINFACH Artikel NULL ALLE Autor NULL NULL NULL 10 80.00 Verwendung von where Es ist deutlich zu erkennen, dass der Autorenindex für eine einfache Abfrage verwendet wird. Der Abfragetyp ist der schlechteste vollständige Tabellenscan. Lassen Sie uns das nicht voreilig erklären. Verwenden wir stattdessen dieselbe Anweisung. Erklären Sie „Select * from articles where author = "Autor"“ 1 EINFACHE Artikel NULL ref Autor Autor 1022 const 2 100,00 NULL Sie können sehen, dass der Abfragetyp dieses Mal ref ist. Das heißt, da die Anzahl der vom Autor Daxiong geschriebenen Datenzeilen 30 % der Gesamtdaten übersteigt, glaubt MySQL, dass das vollständige Scannen der Tabelle schneller ist als die Verwendung von Indizes. Dies ist die Bedeutung der Konzepte Indexkardinalität und Indexselektivität. Daher sollten Sie beim Erstellen eines Index darauf achten, den Index für eine Spalte mit einer hohen Indexkardinalität zu erstellen. Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „Zusammenfassung der Kenntnisse im Bereich MySQL-Indexoperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Allgemeinfunktionen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Protokolloperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-Transaktionsoperationen“, „Zusammenfassung der Kenntnisse im Bereich MySQL-gespeicherte Prozeduren“ und „Zusammenfassung der Kenntnisse im Zusammenhang mit MySQL-Datenbanksperren“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: Warum TypeScripts Enum problematisch ist
>>: Verwenden Sie Shell-Skripte, um Docker-Dienste stapelweise zu starten und zu stoppen
Ein Student im zweiten Studienjahr fragte mich, w...
Einführung: MySQL-Datenbankwiederherstellung nach...
Inhaltsverzeichnis Überblick Eigenschafteneinstel...
Fehler Beim Herstellen einer Verbindung zu MySQL ...
Beim Erstellen einer Datenbank und Schreiben eine...
Inhaltsverzeichnis 1. Zweck 2. Grammatik 3. Üben ...
In MySQL können Sie mit der REVOKE-Anweisung best...
Vorwort In diesem Artikel wird das Installationst...
Wie wir alle wissen, wird die absolute CSS-Positi...
1. Laden Sie das Pip-Installationspaket entsprech...
Verwenden Sie navicat zum Testen und Lernen: Verw...
MySQL ist ein relationales Datenbankverwaltungssy...
<a href = "http: //" style = "c...
Inhaltsverzeichnis Hintergrund Frage Problemanaly...
Nachdem ich gestern die PHP-Entwicklungsumgebung ...