Dieser Artikel entstand aus der Hausaufgabe „Erlernen Sie Indexierungsfähigkeiten in einer Minute“. Angenommen, die Tabellenstruktur für die Auftragsabwicklung ist: Bestellung (oid, Datum, UID, Status, Geld, Zeit, …) In:
Angenommen, eine Bestellung hat drei Zustände: 0 wurde aufgegeben, 1 wurde bezahlt und 2 wurde abgeschlossen. Geschäftsanforderung: Abfrage nicht abgeschlossener Bestellungen, welches SQL ist schneller?
Fazit: Lösung 1 ist die langsamste, während die Lösungen 2, 3 und 4 alle den Index treffen können. Aber... 1: Union All kann definitiv den Index erreichen Wählen Sie * aus der Reihenfolge, in der Status = 0 ist Vereinigung alle Wählen Sie * aus der Reihenfolge, in der Status = 1 veranschaulichen: Sagen Sie MySQL direkt, was zu tun ist. MySQL verbraucht am wenigsten CPU Programmierer schreiben SQL nicht oft auf diese Weise (alles vereinigen). 2: Einfach in kann den Index treffen Wählen Sie * aus der Reihenfolge, in der der Status in (0,1) liegt. veranschaulichen: Lassen Sie MySQL nachdenken, die Abfrageoptimierung verbraucht mehr CPU als die Vereinigung aller, aber es ist vernachlässigbar Programmierer schreiben SQL (in) oft so. In diesem Beispiel wird empfohlen, es so zu schreiben Drei: Für oder kann die neue Version von MySQL den Index treffen Wählen Sie * aus der Reihenfolge, in der Status = 0 oder Status = 1 veranschaulichen: Lassen Sie MySQL nachdenken. Die Abfrageoptimierung verbraucht mehr CPU als IN. Belasten Sie MySQL nicht. Es wird Programmierern nicht empfohlen, „oder“ häufig zu verwenden, da nicht alle „oder“ den Index treffen. Für ältere MySQL-Versionen empfiehlt es sich, 4. Bei != treffen negative Abfragen definitiv nicht den Index Wählen Sie * aus der Reihenfolge, in der Status! = 2 veranschaulichen: Vollständiger Tabellenscan, die am wenigsten effiziente und langsamste aller Lösungen Negative Lookups sind verboten V. Weitere Optionen Wählen Sie * aus der Reihenfolge, in der der Status < 2 ist In diesem konkreten Beispiel ist es tatsächlich schnell, aber: Dieses Beispiel gibt nur drei Zustände an. Das tatsächliche Geschäft hat mehr als diese drei Zustände, und der „Wert“ des Zustands erfüllt gerade die partielle Ordnungsbeziehung. Was ist, wenn Sie andere Zustände prüfen möchten? SQL sollte sich nicht auf den Wert der Aufzählung verlassen, und die Lösung ist nicht universell. Dieses SQL ist schlecht lesbar, schlecht verständlich und schlecht wartbar. Es wird dringend davon abgeraten. 6. Hausaufgaben Kann eine solche Abfrage den Index treffen? Wählen Sie * aus der Reihenfolge, in der die UID in ( Wählen Sie die UID aus der Reihenfolge, in der der Status = 0 ist. ) select * from order where status in (0, 1) sortieren nach Datum absteigend Wählen Sie * aus der Reihenfolge, in der Status = 0 oder Datum <= CURDATE() Hinweis: Dies ist nur ein Beispiel. Seien Sie nicht zu pingelig, was die Rationalität des SQL für das jeweilige Unternehmen angeht. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Methoden und Schritte zum Bereitstellen mehrerer War-Pakete in Tomcat
>>: Beispielcode zur Implementierung der Großbildanpassung auf dem PC mit vue+px2rem (REM-Anpassung)
Installationsumgebung: CentOS7 64-Bit-Mini-Versio...
Dieser Artikel beschreibt die MySQL-Indexabdeckun...
zählen(*) erreichen 1. MyISAM: Speichert die Gesa...
Funktion Herkunft Ich habe kürzlich an einem H5 g...
Zusammenfassung: Nginx-Reverse-Proxy für JIRA kon...
Vorwort Das Linux-System wird durch den Systemdie...
Fügen Sie das Tag <Head> hinzu <meta http...
Bedürfnisse entdecken Wenn nur ein Teil eines Ber...
Ich habe schon einmal einen solchen Artikel gesch...
Die Indizierung ähnelt dem Erstellen bibliografis...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Lassen Sie uns zunächst über d...
Inhaltsverzeichnis 1. Master-Slave-Synchronisatio...
Inhaltsverzeichnis 1. Reagieren Grundlegende Verw...
Zeit(); Funktion Funktionsprototyp: time_t time(t...