Da viele der Leistungsprobleme mit Datenbankproblemen zu tun haben, gebe ich Ihnen einige spezifische Dinge an die Hand, die Sie beim Tuning von Abfragen und gespeicherten Prozeduren beachten sollten.
Vermeiden Sie Cursors in den meisten Datenbanken. Vermeiden Sie auch Schleifen. Der Datenzugriff sollte in den meisten Fällen satzbasiert erfolgen und nicht Datensatz für Datensatz verarbeitet werden. Dazu gehört auch, dass Sie eine gespeicherte Prozedur mit einem einzigen Datensatz nicht wiederverwenden, wenn Sie 1.000.000 Datensätze auf einmal einfügen möchten.
Verwenden Sie niemals select *, sondern geben Sie nur die Felder zurück, die Sie tatsächlich benötigen. Dies gilt vor allem bei Joins, da die Join-Felder wiederholt werden und somit sowohl den Server als auch das Netzwerk unnötig belasten.
Vermeiden Sie die Verwendung von korrelierten Unterabfragen. Verwenden Sie Joins (einschließlich Joins zu abgeleiteten Tabellen, wo dies möglich ist) (ich weiß, dass dies für Microsoft SQL Server gilt, aber testen Sie den Rat, wenn Sie ein anderes Backend verwenden).
Index, Index, Index. Und aktualisieren Sie diese Statistiken, falls sie für Ihre Datenbank zutreffen.
Machen Sie die Abfrage sargbar . Vermeiden Sie also Dinge, die die Verwendung der Indizes unmöglich machen, wie die Verwendung eines Platzhalters im ersten Zeichen einer like-Klausel oder einer Funktion in der Verknüpfung oder als linker Teil einer where-Anweisung.
Verwenden Sie die richtigen Datentypen. Es ist schneller, Datumsberechnungen in einem Datumsfeld durchzuführen, als zu versuchen, einen String-Datentyp in einen Datums-Datentyp zu konvertieren und dann die Berechnung durchzuführen.
Setzen Sie niemals eine Schlaufe in einen Abzug!
Die meisten Datenbanken verfügen über eine Möglichkeit, zu überprüfen, wie die Abfrage ausgeführt werden soll. In Microsoft SQL Server wird dies als Ausführungsplan bezeichnet. Prüfen Sie diesen zuerst, um festzustellen, wo die Probleme liegen.
Berücksichtigen Sie, wie oft die Abfrage ausgeführt wird und wie lange sie dauert, wenn Sie bestimmen, was optimiert werden muss. Manchmal können Sie durch eine geringfügige Optimierung einer Abfrage, die täglich millionenfach ausgeführt wird, mehr Leistung erzielen, als wenn Sie einer lang laufenden Abfrage, die nur einmal im Monat ausgeführt wird, Zeit abnehmen.
Verwenden Sie eine Art Profiler-Tool, um herauszufinden, was wirklich an die und von der Datenbank gesendet wird. Ich kann mich an ein Beispiel aus der Vergangenheit erinnern, bei dem wir nicht herausfinden konnten, warum die Seite so langsam geladen wurde, obwohl die gespeicherte Prozedur schnell war, und durch die Profilerstellung herausfanden, dass die Webseite die Abfrage viele Male statt einmal abfragte.
Mit dem Profiler können Sie auch feststellen, wer wen blockiert. Einige Abfragen, die allein schnell ausgeführt werden, können aufgrund von Sperren durch andere Abfragen sehr langsam werden.