Hier einige Tipps von Ausbildungsstätten und mein eigenes Resümee: Tabelle „sys_user“ erstellen ( `id` varchar(64) NOT NULL COMMENT 'Primärschlüssel', `name` varchar(64) STANDARD NULL KOMMENTAR 'name', `Alter` int(64) DEFAULT NULL KOMMENTAR 'Alter', `pos` varchar(64) DEFAULT NULL KOMMENTAR 'Position', Primärschlüssel (`id`), SCHLÜSSEL `idx_sys_user_nameAgePos` (`Name`,`Alter`,`Pos`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Benutzertabelle'; Diese Tabelle hat vier Felder: Primärschlüssel, Name, Alter, Position Lassen Sie uns die erste Formel erklären: ALTER TABLE sys_user ADD INDEX idx_sys_user_nameAgePos(Name, Alter, Position); Nachfolgend sehen Sie unsere Suchanweisung: SELECT * FROM sys_user WHERE name = ‚Xiaoming‘ AND age = 22 AND pos = ‚java‘; Ob der Index verwendet wird, können wir erkennen, indem wir vor die Suchanweisung das Schlüsselwort EXLAIN setzen. (1) EXPLAIN SELECT * FROM sys_user WHERE name = 'Xiaoming' AND age = 22 AND pos = 'java'; (2) EXPLAIN SELECT * FROM sys_user WHERE name = 'Xiaoming' AND age = 22; (3) EXPLAIN SELECT * FROM sys_user WHERE name = 'Xiaoming' AND pos = 'java'; Aus den angezeigten Ergebnissen können wir ersehen, dass wir alle drei Felder des ersten zusammengesetzten Index, nur zwei Felder des zweiten zusammengesetzten Index und nur ein Feld des dritten zusammengesetzten Index verwendet haben. Wir verwenden in allen drei Anweisungen Indizes und die erste ist offensichtlich die beste. Mal sehen, was schief geht: (4) EXPLAIN SELECT * FROM sys_user WHERE age = 22; (5) EXPLAIN SELECT * FROM sys_user WHERE pos = 'java'; (6) EXPLAIN SELECT * FROM sys_user WHERE age = 22 AND pos = 'java'; Die oben genannten drei Situationen werden alle zu vollständigen Tabellenscans, da sie das Prinzip des ganz linken Präfixes verletzen. Da die ganz linke Spalte des zusammengesetzten Indexes Name ist, ist der Index ungültig, wenn die Suchbedingung Name nicht vorne steht. Die erste Situation erfüllt die vollständige Werteübereinstimmung, die zweite erfüllt die beiden Felder Name und Alter und die dritte Situation erfüllt nur Name, sodass der Index nur Name verwendet. 3. Führen Sie keine Vorgänge (Berechnungen, Funktionstypkonvertierungen (automatisch oder manuell)) an der Indexspalte durch, da dies den Index ungültig macht und in einen vollständigen Tabellenscan umwandelt. (7) EXPLAIN SELECT * FROM sys_user WHERE LEFT(name,1)='Xiaoming'; Der siebte Fall schlägt fehl, weil die Indexspalte Berechnungen oder Funktionsoperationen ausführt, was zu einem vollständigen Tabellenscan führt. 4. Die Speicher-Engine kann die Spalten auf der rechten Seite der Bereichsbedingung im Index nicht verwenden <br /> Vielleicht verstehen Sie nicht, was der obige Text bedeutet. Führen wir die folgende Abfrageanweisung aus, um ihn zu verstehen. (8) EXPLAIN SELECT * FROM sys_user WHERE name = 'Xiaoming' AND age < 22 AND pos = 'java'; Aus der obigen Abbildung können wir ersehen, dass der Typ zu einer Bereichsebene geworden ist, was bedeutet, dass der Index des POS-Felds nach Alter <22 ungültig ist. 5. Versuchen Sie, abdeckende Indizes zu verwenden (Abfragen, die nur auf den Index zugreifen (Indexspalten und Abfragespalten sind identisch) und reduzieren Sie die Verwendung von select * <br /> Dies ist die wörtliche Bedeutung. Das Abfragen bestimmter Felder ist effizienter als das Abfragen von *. Vergleichen wir es. (9) EXPLAIN SELECT * FROM sys_user WHERE name = 'Xiaoming' AND age = 22 AND pos = 'java'; (10) EXPLAIN SELECT name, age, pos FROM sys_user WHERE name = 'Xiaoming' AND age = 22 AND pos = 'java'; 6. MySQL kann keine Indizes verwenden, wenn ungleiche Werte (!= oder <>) verwendet werden, was zu einem vollständigen Tabellenscan führt (11) EXPLAIN SELECT * FROM sys_user WHERE name != 'Xiaoming' Die Ergebnisse zeigen, dass der Indexfehler einen vollständigen Tabellenscan verursacht hat 7. Ist null, ist nicht null und Indizes können nicht verwendet werden (12) EXPLAIN SELECT * FROM sys_user WHERE name ist nicht null 8. Wenn „like“ mit einem Platzhalter („%abc...“) beginnt, wird der MySQL-Index ungültig und der Vorgang wird zu einem vollständigen Tabellenscan. (Durch das Schreiben von „%“ auf der rechten Seite kann die Ungültigkeit des Index vermieden werden. Wenn das Unternehmen „%abc...%“ wirklich benötigt, können Sie einen überdeckenden Index verwenden, um die Ungültigkeit des Index zu vermeiden.) (13) EXPLAIN SELECT * FROM sys_user WHERE Name wie '%明%' (14) EXPLAIN SELECT * FROM sys_user WHERE Name wie '明%' (15) EXPLAIN SELECT name,age,pos FROM sys_user WHERE name like '%明%' Aus den obigen Ergebnissen geht hervor, dass der erste Index fehlschlägt. Der zweite Index kann Indexfehler vermeiden, indem er einfach das % auf der rechten Seite schreibt. Der dritte Index kann das Problem des Indexfehlers lösen, indem er einen abdeckenden Index verwendet, wenn das Unternehmen wirklich ein SQL wie „%abc...%“ benötigt. 9. Die Indizierung von Zeichenfolgen schlägt fehl, wenn sie nicht in einfache Anführungszeichen eingeschlossen sind (16) EXPLAIN SELECT * FROM sys_user WHERE name=222; Da die Suchzeichenfolge in einfache Anführungszeichen eingeschlossen werden muss, ist die oben verwendete Zahl 222 vom Typ int. Bei der Suche ermittelt MySQL, dass der Name vom Typ varchar ist, und konvertiert 222 zum Abrufen in „222“. Die Indexspalte wird einer Typkonvertierung unterzogen, sodass der Index ungültig wird. 10. Verwenden Sie oder weniger, da es den Index ungültig macht, wenn es zum Verbinden verwendet wird (16) EXPLAIN SELECT * FROM sys_user WHERE name = "Xiaoming" oder age = 22; Dies ist das Ende dieses Artikels über die Situationen, in denen MySQL-Indizes ungültig werden. Weitere Informationen zur Ungültigkeit von MySQL-Indizes 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:
|
<<: Kann Asynchronität in JavaScript „Await“ speichern?
>>: Lösungen für den Fehler und die Ungültigkeit beim Öffnen von nginx.pid
1. kein Aufhebens Führen Sie das Programm so aus,...
Ein Datenbankindex ist eine Datenstruktur, deren ...
Problem: Die Partition, in der MySQL Datendateien...
Inhaltsverzeichnis 1. Lösung 2. MySQL-Zeichensatz...
Während der Projektentwicklung bin ich gestern auf...
Reguläre Ausdrücke werden häufig verwendet, um Te...
Die Methode zur Lösung des Problems, das anfängli...
1. Big Data und Hadoop Um Big Data zu studieren u...
FastDFS- und Nginx-Integration: Der Tracker wird ...
Als ich mir selbst die Webentwicklung beibrachte,...
Wie kann ich nach dem Bearbeiten einer Datei in L...
Inhaltsverzeichnis 1. Docker-Konfiguration 2. Ers...
Inhaltsverzeichnis 1. Wechseln Sie zwischen Produ...
Wenn wir lernen, die 3D-Effekte von CSS3 zum Erst...
Inhaltsverzeichnis Vorwort 1. NJS-Modul installie...