2014-11-03 8 views
7

Ich habe 3 Tabellen:
1. Schüler: {id, name, Rolle}
2. Thema: {id, name}
3. Marken: {STUDENT_ID, subject_id, Noten}
Was ist besser: Prozedur in einer Prozedur aufrufen oder sql innerhalb einer Prozedur ausführen?

I habe eine Prozedur, die alle Schüler und ihre Noten zurückgibt (sagen wir getAllMarks()), ich möchte eine andere Prozedur erstellen, die die Markierungen einer gegebenen Rollnummer zurückgibt (zB getRollMarks (int rollno)). Also gibt es zwei Möglichkeiten, wie ich die Prozedur erstellen kann:
1. Schreiben Sie die entsprechende SQL, um das Ergebnis in getRollMarks-Prozedur zu erhalten.
2. Rufen Sie getAllMarks in getRollMarks auf und wenden Sie where-Klausel auf das Ergebnis an, das von getAllMarks zurückgegeben wird.

Kann jemand Vor- und Nachteile der oben genannten zwei Methoden vorschlagen? Ich habe 2 Vorteile von Methode 2:
1.SQL-Abfragen werden nicht über Prozeduren hinweg wiederholt.
2.Wenn sich etwas in einer Tabelle ändert, erfolgt die Änderung an einer Stelle/Prozedur, nicht in jeder Prozedur, die diese Tabelle verwendet.

PS: Die Tabellen sind nur zum Beispiel, tatsächlich sind sie größere Tabellen mit vielen Parametern abzufragen. Die Frage kann vereinfacht werden als sollten wir wiederholte Abfragen in verschiedenen Verfahren schreiben, oder sollten wir bestehende Prozeduren mit erforderlichen Klausel (wo, Reihenfolge von, Joins usw.) verwenden?

Antwort

1

Wenn Sie die Abfrage nicht wiederholen möchten, sollten Sie eine Ansicht verwenden. Auch leistungsmäßig ist es schneller.

+0

Erstens, ich habe nie gesagt, ich will nicht, ich will die Lösung, die besser ist. Zweitens gab ich Ihnen eine Tabelle als ein Beispiel, es kann 10+ Tabellen mit 10^6 Reihen von Daten und mehreren Verfahren wie oben zwei geben. Es wird also nicht gut sein, Ansichten für alle zu erstellen, denke ich. – thekosmix

+1

ok ich schätze, ich vermisse es verstanden aber ich es ist ein Profi, wegen der leichteren Wartung weniger Wiederholungen zu haben. Leistungsmäßig gibt es auch keinen großen Unterschied zwischen dem Aufruf geschachtelter gespeicherter Prozeduren oder dem Aufrufen von einzelnen http://sqlblog.com/blogs/alexander_kuznetsov/archive/2011/07/20/will-wrapping-up-code-in-a-reusable -stored-procedure-hurt-performance.aspx –

+0

danke für den Link, es scheint, das Beispiel in den Link genommen sind nicht gut genug, um die Leistung der beiden zu vergleichen, in meinem Fall gibt es mehr als 2 Tabellen mit mehr als Lakh Reihen. Ich denke, dass es im zweiten Fall einen erheblichen Leistungsaufwand geben wird. Denkst du, Ansichten oder Temp-Tabellen können in irgendeiner Weise hilfreich sein? – thekosmix

Verwandte Themen