2010-11-19 18 views
2

Ich habe ein paar komplexe Abfragen, die sehr oft ausgeführt werden. Zwischenspeichern der Ergebnisse ist nicht möglich, da sie die meiste Zeit aktualisiert werden, und das Sehen der aktualisierten Daten ist der springende Punkt.Gespeicherte Prozeduren für komplexe Abfragen

Ich bin nicht erlaubt, die Datenbankeinstellungen zu ändern, und diejenigen, die es tun, werden es nicht tun, wenn die Hölle zuerst einfriert, also muss ich alles tun, um Abfragen und Tabellen zu optimieren.

Da ich denke, dass ich bereits alles getan habe, was ich für diese Abfragen und die Tabellen, die sie verwenden, habe, dachte ich, wenn es Geschwindigkeitssteigerungen gäbe, wenn ich gespeicherte Prozeduren für sie erstellen würde.

Würde es funktionieren, um die Geschwindigkeit zu erhöhen, oder sollte ich nach etwas anderem suchen?

+0

Was ist mit dem Einrichten einer Ansicht ... – Webnet

+0

Ich dachte ein paar Mal darüber nach, aber ich erinnere mich irgendwo lesen, wie mysql die Abfrage für eine Ansicht nicht kompiliert, so dass alles den Code besser aussehen würde Also habe ich mich nicht mit Ansichten beschäftigt. Oder sind meine Informationen falsch? – Carlos

Antwort

0

Siehe folgenden Link

MySQL Stored Procedure vs. complex query

Es wird Ihnen kleinen Leistungsschub geben.

+0

Ich wünschte, ich hätte diese Frage früher gefunden. Wie auch immer, es beantwortet die Frage, ob ich einen SP verwenden sollte, und es scheint, ist die Antwort „nein“ ist, weil die Performance-Gewinn sehr klein sein wird. – Carlos

2

Nein, eine gespeicherte Prozedur erhöht die Leistung einer "harten" Abfrage nicht.

Meistens werden harte Abfragen von der Datenbank verursacht, die viel Arbeit aufwenden muss, um die Antwort zu finden. Dies wird nicht anders sein, wenn es in einer gespeicherten Prozedur ist.

Das Ändern der Datenbankeinstellungen kann sich auf einige Dinge auswirken. Optimieren Sie eine Abfrage jedoch am besten, indem Sie die Struktur Ihrer Daten ändern, sodass Sie weniger oder weniger Spalten abfragen müssen. Alternativ können Sie möglicherweise bessere Indizes oder eine andere Möglichkeit zur Verbesserung der Abfrage verwenden.

Verwenden Sie EXPLAIN. Verwenden Sie ein Nicht-Produktivsystem für Leistungstests. Setzen Sie Ihre Anfragen nicht in eine Prozedur (wenn die Leistung der einzige Grund dafür ist).

+0

Alles, was ich bereits gemacht habe, und ich habe enorme Verbesserungen bei der Leistung. Dann verlangsamten sich die Dinge wieder, während die Tische weiterwuchsen. – Carlos

+0

Glauben Sie, dass die Ent normalisierung einer Datenbank für Performance-Zwecke auch vertretbar ist? Dies kann oft die Komplexität einer Abfrage verringern, obwohl dies die Zeit für das Einfügen/Aktualisieren von Daten erhöhen kann. Es scheint jedoch so, als könnten sich diese Kosten amortisieren, da INSERTs und UPDATEs oft in kleineren Abschnitten über längere Zeiträume ausgeführt werden. –

+0

Bereits eine Denormalisierung durchgeführt. Es hat die Zeit für einige meiner langsamsten Abfragen drastisch reduziert. Oder vielleicht hatte ich die Tabellen schlecht entworfen, was mich nicht überraschen würde, da ich noch nie mit Tabellen gearbeitet hatte, die Hunderttausende von Zeilen erreichten und Joins mit ebenso großen Tabellen benötigten. – Carlos

0

Ja. Die Verwendung gespeicherter Prozeduren erhöht die Leistung. Da der SP kompiliert und im Datenbankserver gespeichert ist.

Aber dann kommt es auch auf die Struktur der Tabelle und Abfrage an!

Da Daten wächst, wird die Leistung niedrig sein, wenn Sie schlechte Datenbankstruktur und nicht optimierte Abfrage haben.

+0

Können Sie geben darüber Aufschluss, wie ich nicht 100% sicher bin, das ist richtig. – Rippo

+0

Lesen Sie den folgenden Link im Abschnitt - Gespeicherte Prozeduren und Ausführungspläne http://msdn.microsoft.com/en-us/library/aa174792%28SQL.80%29.asp – Lamps

+0

"Inhalt nicht gefunden". Auch, wenn es auf MSN ist, wird es nicht über SQLServer sein? – Carlos