Installieren Sie SakilaWir werden die MySQL-Beispieldatenbank sakila verwenden, um SQL dev.mysql.com/doc/sakila/… zu demonstrieren und zu erklären. Index-Scan-Sortierung MySQL bietet zwei Möglichkeiten, geordnete Ergebnisse zu erzeugen: durch Sortiervorgänge oder durch Scannen in Indexreihenfolge. Wenn der Wert der von EXPLAIN ausgegebenen Typspalte „index“ ist, bedeutet dies, dass MySQL zum Sortieren Indexscannen verwendet. TabellenstrukturAnhand der Mietpreistabelle erklären wir CREATE TABLE `Miete` ( EINDEUTIGER SCHLÜSSEL `rental_date` (`rental_date`,`inventory_id`,`customer_id`), SCHLÜSSEL `idx_fk_inventory_id` (`Inventar-ID`), SCHLÜSSEL `idx_fk_customer_id` (`customer_id`), SCHLÜSSEL `idx_fk_staff_id` (`staff_id`), ) ENGINE=InnoDB AUTO_INCREMENT=16050 DEFAULT CHARSET=utf8mb4; Überprüfen Sie, ob „Dateisortierung verwenden“ in „Extra“ angezeigt wird (der Sortiervorgang, der in MySQL nicht mithilfe des Index abgeschlossen werden kann, wird als „Dateisortierung“ bezeichnet). Wenn wir versuchen, ein Feld ohne Index zu sortieren, handelt es sich um „Dateisortierung“. Obwohl sich darin eine Datei befindet, hat es nichts mit der Datei zu tun. Es handelt sich tatsächlich um eine interne Schnellsortierung. Situationen, in denen Index-Scans zum Sortieren verwendet werden können Füllen Sie die führende Spalte ausEs gibt einen Fall, in dem die ORDER BY-Klausel die Anforderung des äußersten linken Präfixes des Index nicht erfüllen muss, nämlich wenn die führende Spalte eine Konstante ist. Wenn in der WHERE-Klausel oder JOIN-Klausel Konstanten für diese Spalten angegeben werden, können die fehlenden Indizes „ausgeglichen“ werden. Wir verwenden die Sakila-Datenbank zum Testen Sie können sehen Im Extra im Buch steht „Using where“, aber als ich es ausführte, verwendete ich „Using index condition“. Der Grund dafür ist, dass die in MySQL mit hoher Leistung verwendete Version 5.5 ist und der Indexbedingungs-Pushdown in Version 5.6 noch nicht offiziell freigegeben wurde. Der Grund, warum hier keine Dateisortierung erfolgt, liegt darin, dass die konstante Bedingung „rental_date = ‚2005-05-25‘“ vorliegt, die dem Ausfüllen der ersten Spalte des Index entspricht und somit die Anforderung des Indexes nach dem ganz linken Präfix erfüllt. Die Sortierung enthält nur eine SortierungSELECT Miet-ID, Mitarbeiter-ID FROM sakila.rental WHERE Mietdatum = '2005-05-25' ORDER BY Inventar-ID desc Sie können sehen Beachten Sie, dass im Buch die Bedingung „Mietdatum>25.05.2005“ verwendet wird. WO Mietdatum > '2005-05-25' ORDER BY Mietdatum, Inventar-ID Derzeit können wir die Indexsortierung nicht verwenden, sondern müssen die gesamte Tabelle direkt scannen, um sie zu sortieren. Der Grund dafür ist, dass zu viele Datenelemente zurückgegeben werden und die Verwendung der Indexabfrage derzeit nicht kosteneffizient ist. Es ist zu beachten, dass die Anzahl der Zeilen in der Erklärung hier nicht genau ist, sondern nur eine Schätzung darstellt. Tatsächlich enthält die Abfrage gemäß dieser Bedingung 16036 Datenelemente. Um dieses Problem zu lösen, müssen Sie ein Limit hinzufügen SELECT Miet-ID, Mitarbeiter-ID FROM sakila.rental WHERE Mietdatum > '2005-05-25' ORDER BY Mietdatum, Inventar-ID Limit 0,10 Der entsprechende Ausführungsplan Sie können sehen, dass der Index verwendet wird Situationen, in denen Index-Scans nicht verwendet werden könnenDie Abfragebedingungen enthalten unterschiedliche SortierrichtungenSELECT Miet-ID, Mitarbeiter-ID FROM sakila.rental WHERE Mietdatum = '2005-05-25' ORDER BY Inventar-ID absteigend, Kunden-ID aufsteigend Beide Spalten im Index sind aufsteigend sortiert. Jetzt ist in der Sortierreihenfolge eine Spalte aufsteigend und die andere absteigend sortiert, sodass eine sekundäre Sortierung erforderlich ist. Die Abfragebedingung bezieht sich auf eine Spalte, die nicht im Index vorhanden istWählen Sie Miet-ID, Mitarbeiter-ID aus sakila.rental, wobei Mietdatum = '2005-08-23 21:01:09' ist. Bestellen Sie nach Inventar-ID, Mitarbeiter-ID. Wenn das Präfix ganz links nicht kombiniert werden kannWählen Sie Miet-ID, Mitarbeiter-ID aus sakila.rental, wobei Mietdatum = '2005-08-23 21:01:09' ist. Bestellen Sie nach Kunden-ID. Wenn die erste Spalte der Abfragebereich istWählen Sie Miet-ID, Mitarbeiter-ID aus sakila.rental, wobei Mietdatum > '2005-08-22' ist. Bestellen Sie nach Inventar-ID, Kunden-ID. bei mehreren gleichen BedingungenSELECT Vermietungs-ID, Mitarbeiter-ID FROM sakila.rental WHERE Vermietungsdatum ='2005-08-23 21:01:09' und Inventar-ID in (1,2) ORDER BY Kunden-ID Einfach ausgedrückt werden diejenigen sortiert, die nicht dem äußersten linken Präfix des Index entsprechen. ZusammenfassenHeute haben wir die Index-Scan-Sortierung in MySQL erklärt. Morgen werden wir weitere Methoden zum Erstellen von Hochleistungsindizes vorstellen. Bleiben Sie dran und wir sehen uns im nächsten Artikel! Oben finden Sie ausführliche Informationen zur einfachen Verwendung des MySQL-Index-Scans. Weitere Informationen zur Sortierung per MySQL-Index-Scan finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Website-Design-Erfahrung Zusammenfassung der häufigsten Fehler beim Erstellen von Websites
>>: Zabbix überwacht die Konfiguration der Docker-Anwendung
Inhaltsverzeichnis Stil mit Gültigkeitsbereich St...
Ein Wort vorab: Plötzlich erhielt ich die Aufgabe...
Um eine große Anzahl gleichzeitiger Besuche bewäl...
Wenn Front-End und Back-End interagieren, müssen ...
Ergebnis:Implementierungscode html <nav class=...
IFNULL(Ausdruck1,Ausdruck2) Wenn expr1 nicht NULL...
Inhaltsverzeichnis Hintergrund Warum Fehlerbehand...
Lösung, wenn MySQL nicht geschlossen wird: Klicke...
1. Aktualisieren Sie die Yum-Quelle Die PostgreSQ...
Inhaltsverzeichnis 1. Proxy im LAN 2. Intranet-Pe...
Ich habe vor Kurzem eine Website mit Anwaltsempfe...
Inhaltsverzeichnis Klassischer Ansatz Frage Weite...
Inhaltsverzeichnis Wesentlicher Unterschied Daten...
1. Die Organisationsstruktur des Hypertext-Dokumen...
Inhaltsverzeichnis 1. Signalliste 1.1. Echtzeitsi...