Dieser Artikel bietet Ihnen eine Einführung in Methoden zur Optimierung und Verbesserung der SQL-Leistung. Ich hoffe, dass er Ihnen als Referenz dienen wird.
Ø Einfache Leistungsoptimierung
SQL-Leistungsoptimierung ist eines der wichtigen Themen, mit denen sich Datenbankingenieure bei der tatsächlichen Arbeit auseinandersetzen müssen. Für einige Datenbankentwickler ist dies fast der einzige Vorschlag. Tatsächlich bestimmt in Anwendungsszenarien, die eine schnelle Reaktion erfordern, wie z. B. WEB-Dienste, die Leistung von SQL direkt, ob das System verwendet werden kann. Hier stellen wir hauptsächlich einige Optimierungstechniken vor, die SQL verwenden, um schneller auszuführen und weniger Speicher zu verbrauchen. Im heutigen Artikel wird nur eine davon vorgestellt, und wir werden in Zukunft weiterhin einige andere Optimierungsmethoden aktualisieren.
Bei der strikten Optimierung der Abfrageleistung müssen Sie die Funktionsmerkmale der von Ihnen verwendeten Datenbank verstehen. Darüber hinaus ist die langsame Abfragegeschwindigkeit nicht nur auf die SQL-Anweisung selbst zurückzuführen, sondern auch auf eine schlechte Speicherzuordnung, eine unangemessene Dateistruktur und andere Gründe. Daher löst die hier vorgestellte Methode zur Optimierung von SQL möglicherweise nicht alle Leistungsprobleme, aber es stimmt, dass der Grund für eine schlechte Abfrageleistung oft in der unangemessenen Art und Weise liegt, SQL zu schreiben.
Ø Verwenden Sie effiziente Abfragen
In SQL können verschiedene Codes oft die gleichen Ergebnisse erzielen. Theoretisch sollten verschiedene Codes, die die gleichen Ergebnisse liefern, die gleiche Leistung haben, aber leider wird der vom Abfrageoptimierer generierte Ausführungsplan stark von der externen Struktur des Codes beeinflusst. Wenn Sie die Abfrageleistung optimieren möchten, müssen Sie daher wissen, wie Sie Code schreiben, damit der Optimierer effizienter arbeitet. Wenn der Parameter
eine Unterabfrage ist, ist es sehr praktisch, EXISTS anstelle des Prädikats IN
IN zu verwenden, und der Code ist leicht zu verstehen und wird daher häufig verwendet. Obwohl das IN-Prädikat praktisch ist, besteht jedoch die Gefahr, dass es zu einem Engpass bei der Leistungsoptimierung wird. Wenn der Code viele IN-Prädikate verwendet, kann die Leistung im Allgemeinen bereits durch deren Optimierung erheblich verbessert werden.
Wenn der Parameter von IN eine Liste von Werten wie „1, 2, 3“ ist, ist im Allgemeinen keine besondere Aufmerksamkeit erforderlich. Wenn es sich bei dem Parameter jedoch um eine Unterabfrage handelt, müssen Sie darauf achten.
In den meisten Fällen sind die von [NOT]IN und [NOT]EXISTS zurückgegebenen Ergebnisse dieselben. Wenn jedoch beide für Unterabfragen verwendet werden, ist EXISTS schneller.
Schauen wir uns ein Beispiel an:
Wir versuchen aus der Tabelle Klasse_A herauszufinden, welche Mitarbeiter auch in der Tabelle Klasse_B vorhanden sind. Die folgenden beiden SQL-Anweisungen liefern die gleichen Ergebnisse, aber die SQL-Anweisung mit EXISTS ist schneller.
Beide Ergebnisse lauten wie folgt:
Es gibt zwei Gründe, warum es bei Verwendung von EXISTS schneller geht.
a) Wenn ein Index für die Verbindungsspalte (ID) erstellt wird, muss beim Abfragen von Klasse_B nicht die tatsächliche Tabelle abgefragt werden, sondern nur der Index.
b) Wenn EXISTS verwendet wird, wird die Abfrage beendet, solange eine Datenzeile die Bedingungen erfüllt, und es ist nicht erforderlich, die gesamte Tabelle wie bei Verwendung von IN zu scannen. Dasselbe gilt an dieser Stelle für NOT EXISTS.
Wenn der Parameter von IN eine Unterabfrage ist, führt die Datenbank zuerst die Unterabfrage aus, speichert dann die Ergebnisse in einer temporären Arbeitstabelle (Inline-Ansicht) und scannt dann die gesamte Ansicht. In vielen Fällen ist dieser Ansatz sehr ressourcenintensiv. Bei Verwendung von EXISTS generiert die Datenbank keine temporären Arbeitstabellen.
Aber aus Sicht der Codelesbarkeit ist IN besser als EXISTS. Bei Verwendung von IN sieht der Code klarer und verständlicher aus. Wenn Sie also sicher sind, dass Sie mit IN schnell Ergebnisse erhalten, ist es nicht erforderlich, es in EXISTS zu ändern.
Darüber hinaus haben viele Datenbanken in letzter Zeit versucht, die Leistung von IN zu verbessern. Vielleicht kann IN eines Tages in der Zukunft die gleiche Leistung wie EXISTS erzielen, unabhängig davon, in welcher Datenbank es sich befindet.
Wenn der Parameter eine Unterabfrage ist, verwenden Sie Verbindung anstelle von IN
Um die Leistung von IN zu verbessern, können Sie zusätzlich zur Verwendung von EXISTS auch Verbindung verwenden. Die vorherige Abfrageanweisung kann wie folgt „abgeflacht“ werden.
Diese Schreibmethode kann zumindest den Index für die Spalte „id“ einer Tabelle verwenden. Da keine Unterabfrage vorhanden ist, generiert die Datenbank außerdem keine Zwischentabelle. Es ist schwer zu sagen, welches besser als EXISTS ist, aber wenn es keine Indizes gibt, ist EXISTS vielleicht etwas besser als Joins. Und aus vielen Abfragen geht hervor, dass in manchen Fällen die Verwendung von EXISTS sinnvoller ist als die Verwendung von Verbindungen.
Das obige ist der detaillierte Inhalt vonEinführung in Methoden zur Optimierung und Verbesserung der SQL-Leistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!