Hintergrund Indizes sind ein zweischneidiges Schwert. Sie erhöhen zwar die Abfragegeschwindigkeit, verlangsamen aber auch DML-Operationen. Schließlich verursacht die Indexpflege gewisse Kosten. Fügen Sie daher für den Index hinzu, was hinzugefügt werden soll, und löschen Sie das Unnötige. Ersteres ist Addition und Letzteres ist Subtraktion. Doch in der tatsächlichen Arbeit scheint jeder eher Ersteres zu bevorzugen und Letzteres nur selten zu tun. Der Grund liegt im Letzteren, was schwierig ist. Die Schwierigkeit liegt nicht in der Operation selbst, sondern darin, festzustellen, ob ein Index unbrauchbar ist. So identifizieren Sie nutzlose Indizes Bevor es unsichtbare Indizes gab, konnten Sie sys.schema_unused_indexes verwenden, um nicht verwendete Indizes zu identifizieren. In MySQL 5.6 können Sie auch ohne die Sys-Bibliothek Abfragen über die Basistabelle der Ansicht durchführen. mysql> anzeigen, erstellen, Tabelle sys.schema_unused_indexes\G *************************** 1. Reihe *************************** Ansicht: schema_unused_indexes Ansicht erstellen: CREATE ALGORITHM=MERGE DEFINER=`mysql.sys`@`localhost` SQL SECURITY INVOKER VIEW `sys`.`schema_unused_indexes` ( `object_schema`,` object_name`, `index_name`) as select` t`.`Object_schema` as `object_schema`,` t`.`Object_name` as `object_name`,` t'Index_name `Index_name `t` Join` Information_schema`.`statistics` `s` on f8) = `s`.`index_name`)) wob .`seq_in_index` = 1)) Order by `t`.`object_schema`,` t`.`object_name`character_set_client: utf8mb4 Sortierverbindung: utf8mb4_0900_ai_ci 1 Zeile im Satz, 1 Warnung (0,00 Sek.) Doch dieser Ansatz hat auch Nachteile. 1. Wenn die Instanz neu gestartet wird, werden die Daten im Performance-Schema gelöscht. 2. Was passiert, wenn der Index basierend auf der obigen Abfrage gelöscht wird und die Abfrageleistung plötzlich nachlässt? Das Aufkommen unsichtbarer Indizes kann die oben genannten Mängel wirksam ausgleichen. Wenn Sie den Index auf unsichtbar setzen, ignoriert der Optimierer den Index bei der Auswahl eines Ausführungsplans automatisch, selbst wenn FORCE INDEX verwendet wird. Dies wird natürlich durch die Option use_invisible_indexes in der Variable optimizer_switch bestimmt, die standardmäßig deaktiviert ist. Wenn Sie den Unterschied im Ausführungsplan einer Abfrage vor und nach der Indexanpassung sehen möchten, können Sie den Wert von use_invisible_indexes auf Sitzungsebene anpassen, beispielsweise: mysql> anzeigen, Tabelle erstellen slowtech.t1\G *************************** 1. Reihe *************************** Tabelle: t1 Tabelle erstellen: CREATE TABLE `t1` ( `id` int(11) NICHT NULL, `name` varchar(10) DEFAULT NULL, Primärschlüssel (`id`), SCHLÜSSEL `idx_name` (`name`) /*!80000 UNSICHTBAR */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 Zeile im Satz (0,00 Sek.) mysql> erläutern Sie „select * from slowtech.t1“, wobei Name='a'; +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+---------+----------+----------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+---------+----------+----------+ | 1 | SIMPLE | t1 | NULL | ALL | NULL | NULL | NULL | NULL | 6 | 16,67 | Verwenden von where | +----+----------+----------+---------+------+---------------+---------+---------+------+---------+------+---------+----------+----------+ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) mysql> setze Sitzung optimizer_switch="use_invisible_indexes=on"; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> erläutern Sie „select * from slowtech.t1“, wobei Name='a'; +----+----------+-------+------------+------+---------------+-----------+----------+----------+---------+----------+----------+----------+-------------+ | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssel | Schlüssellänge | Ref. | Zeilen | gefiltert | Extra | +----+----------+-------+------------+------+---------------+-----------+----------+----------+---------+----------+----------+----------+-------------+ | 1 | SIMPLE | t1 | NULL | ref | idx_name | idx_name | 43 | const | 1 | 100.00 | Index wird verwendet | +----+----------+-------+------------+------+---------------+-----------+----------+----------+---------+----------+----------+----------+-------------+ 1 Zeile im Satz, 1 Warnung (0,00 Sek.) Allgemeine Operationen an unsichtbaren Indizes Erstellen Sie Tabelle t1 (ID int Primärschlüssel, Name varchar (10), Index idx_name (Name) unsichtbar); Tabelle t1 ändern, Index idx_name sichtbar ändern; Tabelle t1 ändern, Index idx_name unsichtbar ändern; So sehen Sie, welche Indizes unsichtbar sind mysql> wähle table_schema,table_name,index_name,column_name,is_visible aus information_schema.statistics, wobei is_visible='no'; +--------------+------------+------------+-------------+------------+ | TABELLE_SCHEMA | TABELLENNAME | INDEX_NAME | SPALTENNAME | SICHTBAR | +--------------+------------+------------+-------------+------------+ | slowtech | t1 | idx_name | Name | NEIN | +--------------+------------+------------+-------------+------------+ 1 Zeile im Satz (0,00 Sek.) Beachten 1. Der Primärschlüsselindex kann nicht auf unsichtbar gesetzt werden. Zusammenfassen Oben ist die neue Funktion von MySQL 8, unsichtbare Indizes, die ich Ihnen vorgestellt habe. Ich hoffe, sie wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten! Das könnte Sie auch interessieren:
|
<<: Eine kurze Einführung in Linux-Leistungsüberwachungsbefehle kostenlos
>>: Detaillierte Erläuterung der Linux-Dateiberechtigungen und Befehle zur Gruppenänderung
Inhaltsverzeichnis Vorwort Was sind dynamische Ei...
Der Code demonstriert die horizontale Zusammenfüh...
1. Der in der Schaltfläche verwendete Wert bezieht...
Der folgende Inhalt stellt den Prozess und die Lö...
Dieser Artikel beschreibt die Verwendung gespeich...
Zusammenfassung: Viele Unternehmen, sogar die meis...
Im Allgemeinen werden Klickereignisse in verschie...
Lassen Sie uns zunächst verstehen, was MySQL ist....
Auf vielen Websites wird im Eingabefeld Hinweiste...
1. es-Startbefehl: docker run -itd -e TAKE_FILE_O...
Professionelles Webdesign ist komplex und zeitint...
Inhaltsverzeichnis Weiterleitungsproxy Nginx-Reve...
Ich habe im Internet nach dreistufigen Verknüpfun...
Sie können problemlos Chinesisch eingeben und im ...
In diesem Artikel wird der spezifische JavaScript...