2010-10-07 3 views
6

Ich schreibe eine Client-Server-Win32-Anwendung in Delphi 7 und in einem Abschnitt muss ich ca. bringen. 100k (weniger oder mehr) Zeilen mit Daten aus einer Oracle-Datenbank. Alles soweit ok, aber eines der Felder muss berechnet werden (eine einfache Division mit einer großen Zahl).Welches ist schnellste Win32 oder SQL-Abfrage?

Meine Frage ist, wie ist weniger Ressourcen verbrauchen und optimal, um die Division in der SQL-Abfrage (vielleicht eine Speicherprozedur), oder den Wert im Code für dieses Feld (auf der Serverseite) zu berechnen? Ich möchte kein TDataset mit berechneten Feldern verwenden.

Oracle-System (v 9.2) wird auch von anderen Anwendungen verwendet, ist nicht nur für diese Anwendung gewidmet.

Vielen Dank im Voraus.

+0

Was werden Sie mit diesen Daten tun? Schickst du sie zurück zur DB oder einmal auf dem Client, werden sie dort gerade manipuliert? Wie beantwortet, wird mot der Zeit verwendet, um diese Daten zu übertragen. Die wirklichen Einsparungen sind, wenn Sie vermeiden können, so viele Zeilen zu übertragen. –

Antwort

8

Die SQL Engines sind für diese Art von Aufgabe ausgelegt, daher lautet die Antwort make the operation in the oracle system.

tun immer die SQL-Datenmanipulationsaufgaben in dem Datenbankserver, die dafür ausgelegt ist.

+1

Delphi ist auch für solche Skalaroperationen ausgelegt, so dass es dort genauso gut gehen kann. Es ist nicht klar aus der Frage, ob die Trennung in einem anderen Kontext als der Anwendung sinnvoll ist, also würde ich keinen der beiden Ansätze missbilligen. Ich könnte, wenn ich mehr wüsste. –

+0

IMHO-Operationen, die die Anzahl der zurückgegebenen Tupel nicht reduzieren, sind in DB langsamer als in Delphi. –

5

wie weniger Ressourcen verbrauchen und optimal, die Division in der SQL-Abfrage zu machen (vielleicht ein Shop-Verfahren), oder den Wert in Code für dieses Feld (auf der Serverseite zu berechnen)

Sollte keinen Unterschied machen. Die meiste Zeit wird für die Berechnung und Übertragung von 100.000 Zeilen aufgewendet.

7

Mit einer solchen skalaren Operation wird der Leistungsunterschied trivial sein. Was auch immer semantisch sinnvoller oder bequemer ist.

4

Wenn die Leistung die gleiche ist, würde ich es an der Stelle tun, wo es am meisten Wartung/Konfiguration freundlich wäre. Wenn die Datenbank ein dediziertes Wartungsfenster (wie Samstag um Mitternacht) für Metadatenänderungen benötigt, würde ich eine Client- oder Middle-Tier-Lösung über eine gespeicherte Prozedur auswählen.

+1

Sehr guter Punkt. Während ich mit anderen übereinstimme, dass es wahrscheinlich effizienter wäre, es auf dem Server zu tun, ist es vielleicht viel praktischer, es dort zu tun, wo man es schnell in die Hand nehmen und Änderungen vornehmen kann. In einigen Umgebungen sind Änderungen am Desktop einfach und Serveränderungen (außerhalb des normalen Veröffentlichungszyklus) erfordern eine VP-Signatur! –

+0

Kehrseite: Die Anwendung wird erneut an 3000 Benutzer freigegeben, wenn die Berechnungsänderungen schwieriger sind als die Genehmigung der Datenbankänderung. –