2008-10-29 5 views
8

Neben der syntaktischen Zucker und Ausdruckskraft, was sind die Unterschiede in der Laufzeit Effizienz. Ich meine, plpgsql kann schneller sein als, sagen wir plpythonu oder pljava? Oder sind sie alle ungefähr gleich?Was sind die Vorteile der Verwendung von plpgsql in Postgresql

Wir gespeicherten Prozeduren zum Nachweis für die Aufgabe verwenden fast-Duplikate Aufzeichnungen von Menschen in einer mäßig großen Datenbank (etwa 10 Millionen von Datensätzen)

+0

Können Sie uns etwas mehr über das System erzählen, in dem es verwendet wird? Basierend auf der Auswahl der Sprachen und der Architektur, die von Ihnen und Ihrem Team verwendet werden, können die Menschen besser beraten werden. –

Antwort

8

plpgsql bietet eine höhere Typsicherheit glaube ich, müssen Sie explizite Casts durchführen, wenn Sie möchten Operationen mit zwei verschiedenen Spalten ähnlichen Typs ausführen, z. B. varchar und text oder int4 und int8. Das ist wichtig, denn wenn Ihr gespeicherter Proc Index verwenden muss, erfordert postgres, dass die Typen genau zwischen den Join-Bedingungen übereinstimmen (edit: auch für Gleichheitsprüfungen, denke ich).

Es kann eine Einrichtung dafür in den anderen Sprachen geben, obwohl ich sie nicht benutzt habe. Auf jeden Fall hoffe ich, dass Sie dadurch einen besseren Ausgangspunkt für Ihre Ermittlungen erhalten.

2

Ohne tatsächliche Tests, würde ich erwarten, dass plpgsql etwas effizienter als andere Sprachen ist, weil es klein ist. Denken Sie daran, dass SQL-Funktionen wahrscheinlich noch schneller als plpgsql sind, wenn eine Funktion einfach genug ist, dass Sie sie nur in SQL schreiben können.

+0

In meinen Tests mit plperl oder etwas anderes als plpgsql funktioniert gut, wenn es nicht SQL-Logik ist. Zum Beispiel Schleifen oder Ausführen von Berechnungen plperl hat immer plpgsql in meinen begrenzten Tests geraucht. – Kuberchaun

6

plpgsql ist sehr gut mit SQL integriert - der Quellcode sollte sehr sauber und lesbar sein. Für SQL-Sprachen wie PLJava oder PLPython müssen SQL-Anweisungen isoliert werden - SQL ist kein Teil der Sprache. Du musst also etwas mehr Code schreiben. Wenn Ihre Prozedur viele SQL-Anweisungen enthält, sollte plpgsql-Prozedur sauberer, kürzer und etwas schneller sein. Wenn Ihre Prozedur keine SQL-Anweisungen enthält, können Prozeduren von externen Sprachen schneller sein - aber externe Sprachen (interpretieren) benötigen einige Zeit für die Initialisierung - für einfache Aufgaben sollten Prozeduren in SQL- oder plpgsql-Sprache daher schneller sein.

Externe Sprachen verwendet werden, wenn Sie einige Funktionen wie den Zugriff auf Netz benötigen, Zugang zu Dateisystem - http://www.postgres.cz/index.php/PL/Perlu_-_Untrusted_Perl_%28en%29

Was ich weiß - die Menschen in der Regel eine Kombination aus PL Sprachen verwenden - (SQL, plpgsql, plperl) oder (SQL , plpgsql, plpython).