1. Die Bedeutung von Indizes Indizes werden verwendet, um schnell Zeilen zu finden, die einen bestimmten Wert in einer Spalte haben. Ohne Index muss MySQL bei Datensatz 1 beginnen und die gesamte Tabelle lesen, bis es die relevanten Zeilen findet. Je größer der Tisch, desto zeitaufwändiger ist es. Wenn die abgefragte Tabellenspalte über einen Index verfügt, kann MySQL schnell zu einer Suchposition in der Mitte der Datendatei gelangen, ohne alle Daten durchsuchen zu müssen. Beachten Sie, dass sequentielle Lesevorgänge viel schneller sind, wenn Sie auf eine große Anzahl von Zeilen zugreifen müssen, da wir diesmal Suchvorgänge auf der Festplatte vermeiden. Wenn Sie das chinesische Schriftzeichen „张“ im Xinhua-Wörterbuch nachschlagen, ohne das Inhaltsverzeichnis zu verwenden, müssen Sie möglicherweise von der ersten bis zur letzten Seite des Xinhua-Wörterbuchs suchen, was zwei Stunden dauern kann. Je dicker das Wörterbuch, desto mehr Zeit werden Sie verbringen. Nun suchen Sie im Verzeichnis nach dem chinesischen Schriftzeichen „张“. Der erste Buchstabe von 张 ist z. Chinesische Schriftzeichen, die mit z beginnen, finden sich auf über 900 Seiten. Mit diesem Hinweis brauchen Sie möglicherweise nur eine Minute, um ein chinesisches Schriftzeichen zu finden. Dies zeigt, wie wichtig die Indizierung ist. Aber heißt das, dass es besser ist, je mehr Indizes Sie erstellen? Natürlich nicht. Wenn das Verzeichnis eines Buches in mehrere Ebenen unterteilt ist, wird Ihnen wahrscheinlich schwindelig. 2. Vorbereitung //Bereiten Sie zwei Testtabellen vormysql> CREATE TABLE `test_t` ( -> `id` int(11) NICHT NULL auto_increment, -> `num` int(11) NICHT NULL Standard '0', -> `d_num` varchar(30) NICHT NULL Standard '0', -> PRIMÄRSCHLÜSSEL (`id`) ->) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> CREATE TABLE `test_test` ( -> `id` int(11) NICHT NULL auto_increment, -> `num` int(11) NICHT NULL Standard '0', -> PRIMÄRSCHLÜSSEL (`id`) ->) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) //Erstellen Sie eine gespeicherte Prozedur, um das Einfügen von Daten zu erleichternmysql> Trennzeichen | mysql> Prozedur i_test erstellen(pa int(11),tab varchar(30)) -> beginnen -> deklariere max_num int(11) als Standard 100000; -> deklariere i als int default 0; -> deklarieren Sie rand_num int; -> deklarieren Sie double_num char; -> -> wenn Tab != 'test_test' dann -> wähle count(id) in max_num von test_t; -> während ich < pa mache -> wenn max_num < 100000 dann -> wählen Sie cast(rand()*100 als unsigniert) in rand_num; -> wähle concat(rand_num,rand_num) in double_num; -> einfügen in test_t(num,d_num)values(rand_num,double_num); -> Ende, wenn; -> setze i = i +1; -> Ende während; -> sonst -> wähle count(id) in max_num aus test_test; -> während ich < pa mache -> wenn max_num < 100000 dann -> wählen Sie cast(rand()*100 als unsigniert) in rand_num; -> einfügen in test_test(num)values(rand_num); -> Ende, wenn; -> setze i = i +1; -> Ende während; -> Ende, wenn; -> Ende| Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Trennzeichen; mysql> Variablen wie "%pro%" anzeigen; // Prüfen Sie, ob Profiling aktiviert ist. Standardmäßig ist es deaktiviert. +---------------------------+-------+ | Variablenname | Wert | +-----------------------------------------+----------+ | Profilierung | AUS | | Größe des Profilverlaufs | 15 | | Protokollversion | 10 | | Slave_Compressed_Protocol | AUS | +-----------------------------------------+----------+ 4 Zeilen im Satz (0,00 Sek.) mysql> set profiling=1; //Nach dem Einschalten soll die Ausführungszeit nach dem Hinzufügen des Index verglichen werden. Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) 3. Beispiele 1. Eine einzelne Tabelle enthält zu wenige Daten, und der Index beeinträchtigt die Geschwindigkeit mysql> call i_test(10,'test_t'); //Füge 10 Bedingungen in die Tabelle test_t ein. Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> wähle num aus test_t, wobei num!=0; mysql> erklären Sie „select num from test_t“, wobei num!=0\G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: test_t Typ: ALLE mögliche Schlüssel: NULL Schlüssel: NULL key_len: NULL Ref: NULL Reihen: 10 Extra: Verwenden von „where“ 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben mysql> erstelle Index num_2 auf test_t (num); Abfrage OK, 10 Zeilen betroffen (0,19 Sek.) Datensätze: 10 Duplikate: 0 Warnungen: 0 mysql> wähle num aus test_t, wobei num!=0; mysql> erklären Sie „select num from test_t“, wobei num!=0\G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: test_t Typ: Index mögliche Schlüssel: num_2 Schlüssel: Num_2 Schlüssellänge: 4 Ref: NULL Reihen: 10 Extra: Verwenden von „where“; Verwenden von „index“ 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben mysql> Profile anzeigen; +----------+------------+---------------------------------------------+ | Abfrage-ID | Dauer | Abfrage | +----------+------------+---------------------------------------------+ | 1 | 0,00286325 | call i_test(10,'test_t') | //Füge zehn Datensätze ein | 2 | 0,00026350 | select num from test_t where num!=0 | | 3 | 0,00022250 | erkläre „select num from test_t“, wobei num!=0 | | 4 | 0,18385400 | create index num_2 on test_t (num) | //Index erstellen| 5 | 0,00127525 | select num from test_t where num!=0 | //Nach Verwendung des Index ist es fast 0,2-mal so viel wie ohne Verwendung des Index| 6 | 0,00024375 | Erläuterung select num from test_t where num!=0 | +----------+------------+------------------------------------------+ 6 Zeilen im Satz (0,00 Sek.) erklären:
Vor einiger Zeit habe ich einen Blogbeitrag darüber geschrieben, was besser ist: MySQL distinct oder group by. Ein Freund hinterließ eine Nachricht, in der er sagte, dass die Testergebnisse sich von meinen damaligen Testergebnissen unterschieden. Damals habe ich es mit einer Analogie erklärt. Heute habe ich Zeit, das Funktionsprinzip des Index anhand von Beispielen intuitiver auszudrücken. 2. Beim Filtern mit Bedingungen nach „wo“, wie z. B. „Sortieren nach“, „Gruppieren nach“ usw., ist es am besten, den folgenden Feldern Indizes hinzuzufügen. Wählen Sie PRIMARY KEY, UNIQUE, INDEX und andere Indizes basierend auf den tatsächlichen Bedingungen aus, aber je mehr, desto besser. Seien Sie maßvoll. 3. Bei der Durchführung von Operationen mit mehreren Tabellen wie gemeinsamen Abfragen und Unterabfragen müssen verwandte Felder indiziert werden mysql> call i_test(10,'test_test'); //Füge 10 Datensätze in die Tabelle test_test ein. Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> erklären select a.num as num1,b.num as num2 from test_t als Left Join tes t_Test als b auf a.num=b.num\G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: eine Typ: Index mögliche Schlüssel: NULL Schlüssel: num_2 Schlüssellänge: 4 Ref: NULL Reihen: 10 Extra: Index verwenden *************************** 2. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: b Typ: ref mögliche Schlüssel: num_1 Schlüssel: num_1 Schlüssellänge: 4 ref: bak_test.a.num //bak_test ist der Datenbankname, a.num ist ein Feld mit test_t-Zeilen: 1080 Extra: Index verwenden 2 Zeilen im Satz (0,01 Sek.) FEHLER: Keine Abfrage angegeben Bei besonders großen Datenmengen sollten Sie auf die Verwendung gemeinsamer Abfragen verzichten, auch wenn Sie diese indiziert haben. Das Obige ist nur eine kurze persönliche Zusammenfassung, die zur Diskussion anregen soll. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Beispiel für das Schreiben von mobilem H5 zum Aufrufen einer APP (IOS, Android)
>>: So konfigurieren Sie die virtuelle Benutzeranmeldung in vsftpd
Docker installieren Sie müssen Docker installiere...
Verwenden von Javascript zum Implementieren eines...
Wildcard-Kategorien: %Prozent-Platzhalter: Gibt a...
1. Fehler beim Verbinden mit Master 'x@xxxx:x...
Wir wissen, dass wir beim Verwenden von HTML im N...
In diesem Artikelbeispiel wird der spezifische Co...
Im Folgenden finden Sie eine Einführung in die Ve...
SMIL fügt Unterstützung für Timing und Mediensync...
Inhaltsverzeichnis Installieren Grundlegende Konf...
Wir haben viele Server, die häufig von externen N...
Zuvor habe ich mehrere Möglichkeiten vorgestellt,...
Problembeschreibung: Der Benutzer hat die Anforde...
Inhaltsverzeichnis Vorwort 1. Was ist ein Abschlu...
1 Problembeschreibung Dieser Artikel sortiert den...
Die Datenmigration muss von MySQL nach ClickHouse...