Heim  >  Artikel  >  Datenbank  >  6 einfache Tipps zur Optimierung der Leistung der SQL-SELECT-Anweisung

6 einfache Tipps zur Optimierung der Leistung der SQL-SELECT-Anweisung

黄舟
黄舟Original
2017-02-22 11:12:111063Durchsuche

Die Leistungsoptimierung von SELECT-Anweisungen ist manchmal eine sehr zeitaufwändige Aufgabe und folgt meiner Meinung nach dem Pareto-Prinzip. 20 % des Aufwands führen wahrscheinlich zu 80 % der Leistungsverbesserung, und es kann sein, dass Sie 80 % der Zeit benötigen, um die anderen 20 % der Leistungsverbesserung zu erzielen. Sofern Sie nicht auf der Venus arbeiten, wo jeder Tag 243 Tagen auf der Erde entspricht, besteht eine gute Chance, dass Ihnen aufgrund der Lieferfristen nicht genügend Zeit bleibt, Ihre SQL-Abfragen zu optimieren.

Basierend auf meiner jahrelangen Erfahrung beim Schreiben und Ausführen von SQL-Anweisungen begann ich mit der Entwicklung einer Checkliste, auf die ich zurückgreife, wenn ich versuche, die Abfrageleistung zu verbessern. Ich beziehe mich darauf, bevor ich die Abfrageplanung durchführe und die Dokumentation für die von mir verwendete Datenbank lese, was manchmal komplex sein kann. Meine Checkliste ist keineswegs umfassend oder wissenschaftlich, sie ist eher eine konservative Berechnung, aber ich kann sagen, dass ich durch die Befolgung dieser einfachen Schritte in den meisten Fällen Leistungsverbesserungen erziele. Checkliste unten.

Indizes prüfen

Indizes sollten zu allen Feldern hinzugefügt werden, die in den WHERE- und JOIN-Teilen der SQL-Anweisung verwendet werden. Machen Sie diesen 3-minütigen SQL-Leistungstest. Lesen Sie die Ergebnisse unabhängig von Ihrer Note unbedingt mit Informationen durch.

Begrenzen Sie die Größe des Arbeitsdatensatzes

Überprüfen Sie die in diesen SELECT-Anweisungen verwendeten Tabellen, um zu sehen, ob Sie eine WHERE-Klausel zum Filtern anwenden können. Ein typisches Beispiel ist eine Abfrage, die gut funktioniert, wenn die Tabelle nur wenige tausend Zeilen enthält. Doch als die Anwendung wuchs, wurden die Abfragen langsamer. Die Lösung kann so einfach sein wie die Beschränkung der Abfrage auf die Anzeige von Daten für den aktuellen Monat.

Wenn Ihre Abfrageanweisung eine Unterabfrage hat, achten Sie darauf, die Filterung auf die innere Anweisung der Unterabfrage anzuwenden, nicht auf die äußere Anweisung.

Wählen Sie nur die Felder aus, die Sie benötigen

Zusätzliche Felder erhöhen normalerweise die Textur der zurückgegebenen Daten, was dazu führt, dass mehr Daten an den SQL-Client zurückgegeben werden. Außerdem:

• Bei der Verwendung von Anwendungen mit Berichts- und Analysefunktionen ist die Berichtsleistung manchmal gering, da das Berichtstool die empfangenen Daten in detaillierter Form aggregieren muss.

• Gelegentlich kann die Abfrage schnell genug ausgeführt werden, aber Ihr Problem könnte ein Netzwerkproblem sein, da große Mengen detaillierter Daten über das Netzwerk an den Berichtsserver gesendet werden.

• Bei Verwendung eines spaltenorientierten DBMS werden nur die von Ihnen ausgewählten Spalten von der Festplatte gelesen. Je weniger Spalten Sie in Ihre Abfrage einbeziehen, desto geringer ist der E/A-Overhead.

Unnötige Tabellen entfernen

Der Grund für das Entfernen unnötiger Tabellen ist derselbe wie der Grund für das Entfernen unnötiger Felder in der Abfrageanweisung.

Das Schreiben von SQL-Anweisungen ist ein Prozess, der normalerweise eine große Anzahl iterativer Prozesse zum Schreiben und Testen von SQL-Anweisungen erfordert. Während der Entwicklung fügen Sie einer Abfrage möglicherweise Tabellen hinzu, die möglicherweise keine Auswirkungen auf die vom SQL-Code zurückgegebenen Daten haben. Sobald die SQL ordnungsgemäß ausgeführt wird, stelle ich fest, dass viele Leute ihre Skripte nicht überprüfen und Tabellen löschen, die keinen Einfluss oder Einfluss auf die endgültigen zurückgegebenen Daten haben. Durch das Entfernen von JOINS-Vorgängen mit unnötigen Tabellen reduzieren Sie eine große Anzahl von Prozessen, die die Datenbank ausführen muss. Manchmal, beispielsweise beim Entfernen von Spalten, werden Sie feststellen, dass die von Ihnen reduzierten Daten über die Datenbank zurückkommen.

Entfernen der Outer-Join-Abfrage

Das ist leichter gesagt als getan, es hängt davon ab, wie viel Einfluss die Änderung des Tabelleninhalts hat. Eine Lösung besteht darin, die Operation OUTER JOINS zu entfernen, indem Platzhalter in den Zeilen beider Tabellen platziert werden. Angenommen, Sie verfügen über die folgenden Tabellen, die durch die Definition von OUTER JOINS sicherstellen, dass alle Daten zurückgegeben werden:

CUSTOMER_ID CUSTOMER_NAME
1 John Doe
2 Mary Jane
3 Peter Pan
4 Joe Soap
CUSTOMER_ID SALES_PERSON
NULL Newbee Smith
2 Oldie Jones
1 Another Oldie
NULL Greenhorn

Die Lösung besteht darin, der Zeile in der Kundentabelle einen Platzhalter hinzuzufügen und alle NULL-Werte in der Verkaufstabelle auf den Platzhalter zu aktualisieren.

CUSTOMER_ID CUSTOMER_NAME
0 NO CUSTOMER
1 John Doe
2 Mary Jane
3 Peter Pan
4 Joe Soap
CUSTOMER_ID SALES_PERSON
0 Newbee Smith
2 Oldie Jones
1 Another Oldie
0 Greenhorn

Sie beseitigen nicht nur die Abhängigkeit von der OUTER JOIN-Operation, sondern standardisieren auch die Darstellung von Verkäufern ohne Kunden. Andere Entwickler müssen keine zusätzlichen Anweisungen wie ISNULL(customer_id, „Noch kein Kunde“) schreiben.

Berechnete Felder in JOIN- und WHERE-Klauseln entfernen

Dies ist ein weiterer Trick, der manchmal leichter gesagt als getan ist, es hängt davon ab, dass Sie das Tabellenschema ändern. Die Größe von die Berechtigungen. Das in der Join-Anweisung verwendete berechnete Feld kann als neues Feld in der Tabelle erstellt werden. Angesichts der folgenden SQL-Anweisung:

FROM sales a 
JOIN budget b ON    ((YEAR(a.sale_date)* 100) + MONTH(a.sale_date)) = b.budget_year_month

Das Hinzufügen einer Spalte mit Jahr und Monat in der Verkaufstabelle kann die Leistung verbessern. Die aktualisierte SQL-Anweisung lautet wie folgt:

SELECT * FROM PRODUCTSFROM sales a 
JOIN budget b ON    a.sale_year_month = b.budget_year_month

Zusammenfassung

Die obigen Vorschläge können auf die folgenden Punkte reduziert werden:

• Überprüfen Sie den Index

• Arbeiten Sie mit dem minimal erforderlichen Datensatz

• Entfernen Sie unnötige Felder und Tabellen

• Entfernen Sie Berechnungsoperationen in Ihren JOIN- und WHERE-Klauseln

Wenn alle diese Vorschläge Ihre SQL-Abfrageleistung nicht verbessern, besteht der letzte Vorschlag darin, zu Venus zu wechseln. Sie benötigen lediglich einen Tag, um Ihre SQL-Anweisungen zu optimieren.

Das Obige ist der Inhalt von 6 einfachen Tipps zur Optimierung der Leistung der SQL SELECT-Anweisung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn