SQL - Datenbank-Tunning
Es braucht Zeit, um ein Datenbankexperte oder ein erfahrener Datenbankadministrator zu werden. Dies alles beinhaltet viel Erfahrung in verschiedenen Datenbankdesigns und gute Schulungen.
Die folgende Liste kann jedoch für Anfänger hilfreich sein, um eine gute Datenbankleistung zu erzielen:
Verwenden Sie das 3BNF-Datenbankdesign, das in diesem Lernprogramm im Kapitel RDBMS-Konzepte erläutert wird.
Vermeiden Sie die Konvertierung von Zahlen in Zeichen, da Zahlen und Zeichen unterschiedlich verglichen werden und zu einer Leistungsminderung führen.
Rufen Sie bei Verwendung der SELECT-Anweisung nur die erforderlichen Informationen ab und vermeiden Sie die Verwendung von * in Ihren SELECT-Abfragen, da dies das System unnötig laden würde.
Erstellen Sie Ihre Indizes sorgfältig für alle Tabellen, in denen Sie häufig suchen. Vermeiden Sie den Index für Tabellen, in denen weniger Suchvorgänge und mehr Einfüge- und Aktualisierungsvorgänge ausgeführt werden.
Ein vollständiger Tabellenscan wird durchgeführt, wenn den Spalten in der WHERE-Klausel kein Index zugeordnet ist. Sie können einen vollständigen Tabellenscan vermeiden, indem Sie einen Index für Spalten erstellen, die als Bedingungen in der WHERE-Klausel einer SQL-Anweisung verwendet werden.
Seien Sie sehr vorsichtig mit Gleichheitsoperatoren mit reellen Zahlen und Datums- / Zeitwerten. Beide können kleine Unterschiede aufweisen, die für das Auge nicht offensichtlich sind, aber eine genaue Übereinstimmung unmöglich machen, wodurch verhindert wird, dass Ihre Abfragen jemals Zeilen zurückgeben.
Verwenden Sie den Mustervergleich mit Bedacht. LIKE COL% ist eine gültige WHERE-Bedingung, die den zurückgegebenen Satz nur auf die Datensätze reduziert, deren Daten mit der Zeichenfolge COL beginnen. COL% Y reduziert jedoch die zurückgegebenen Ergebnisse nicht weiter, da% Y nicht effektiv bewertet werden kann. Der Aufwand für die Bewertung ist zu groß, um berücksichtigt zu werden. In diesem Fall wird COL% verwendet,% Y wird jedoch weggeworfen. Aus dem gleichen Grund verhindert ein führender Platzhalter% COL effektiv, dass der gesamte Filter verwendet wird.
Optimieren Sie Ihre SQL-Abfragen anhand der Struktur der Abfragen (und Unterabfragen) und der SQL-Syntax, um festzustellen, ob Sie Ihre Tabellen so konzipiert haben, dass sie eine schnelle Datenmanipulation unterstützen, und schreiben Sie die Abfrage optimal, damit Ihr DBMS die Daten effizient bearbeiten kann .
Versuchen Sie bei Abfragen, die regelmäßig ausgeführt werden, Prozeduren zu verwenden. Eine Prozedur ist eine potenziell große Gruppe von SQL-Anweisungen. Prozeduren werden vom Datenbankmodul kompiliert und dann ausgeführt. Im Gegensatz zu einer SQL-Anweisung muss das Datenbankmodul die Prozedur nicht optimieren, bevor sie ausgeführt wird.
Vermeiden Sie nach Möglichkeit die Verwendung des logischen Operators ODER in einer Abfrage. ODER verlangsamt unweigerlich fast jede Abfrage für eine Tabelle von beträchtlicher Größe.
Sie können das Laden von Massendaten optimieren, indem Sie Indizes löschen. Stellen Sie sich die Verlaufstabelle mit vielen tausend Zeilen vor. Diese Verlaufstabelle enthält wahrscheinlich auch einen oder mehrere Indizes. Wenn Sie an einen Index denken, denken Sie normalerweise an einen schnelleren Tabellenzugriff. Bei Batch-Ladevorgängen können Sie jedoch davon profitieren, wenn Sie die Indizes löschen.
Führen Sie bei der Ausführung von Batch-Transaktionen COMMIT nach einer angemessenen Anzahl von Datensatzerstellungen durch, anstatt sie nach jeder Datensatzerstellung zu erstellen.
Planen Sie eine regelmäßige Defragmentierung der Datenbank, auch wenn dies die Entwicklung einer wöchentlichen Routine bedeutet.
Eingebaute Tuning-Tools
Oracle verfügt über viele Tools zum Verwalten der Leistung von SQL-Anweisungen, von denen jedoch zwei sehr beliebt sind. Diese beiden Werkzeuge sind -
Explain plan - Das Tool identifiziert den Zugriffspfad, der bei der Ausführung der SQL-Anweisung verwendet wird.
tkprof - misst die Leistung anhand der Zeit, die in jeder Phase der Verarbeitung von SQL-Anweisungen verstrichen ist.
Wenn Sie einfach die verstrichene Zeit einer Abfrage in Oracle messen möchten, können Sie den SQL * Plus-Befehl SET TIMING ON verwenden.
Weitere Informationen zu den oben genannten Tools und zur Defragmentierung der Datenbank finden Sie in Ihrer RDBMS-Dokumentation.