2010-10-07 6 views
6

Piszę aplikację win32-client-win32 w Delphi 7 oraz w sekcji, którą muszę przynieść aprox. 100k (mniej lub więcej) wierszy z danymi z bazy danych Oracle. Wszystko ok jak dotąd, ale jedno z pól musi zostać obliczone (prosty podział z dużą liczbą)., który jest najszybszym zapytaniem win32 lub SQL?

Moje pytanie brzmi, w jaki sposób jest mniej zasobów i optymalne, aby podział w kwerendzie SQL (może procedura magazynu), lub obliczyć wartość w kodzie dla tego pola (po stronie serwera)? Nie chcę używać TDataset z polami obliczonymi.

System Oracle (v 9.2) jest również używany przez inne aplikacje, nie jest dedykowany tylko dla tej aplikacji.

Z góry dziękuję.

+0

Co zamierzasz zrobić z tymi danymi? Czy odsyłasz je do DB lub raz do klienta, w którym są po prostu manipulowane? Jak odpowiedział, mot czasu zostaną wykorzystane do transferu tych danych. Prawdziwe oszczędności są, jeśli możesz uniknąć przeniesienia tego rzędu. –

Odpowiedz

8

Silniki SQL są przeznaczone do tego typu zadań, więc odpowiedź brzmi: make the operation in the oracle system.

Zawsze wykonywać zadania manipulacji danymi SQL w serwerze bazy danych, która jest przeznaczone do tego.

+1

Delphi jest również przeznaczony do tego rodzaju operacji skalarnej, więc może się tam również zdarzyć. Z tego, czy podział ma sens w kontekście innym niż zgłoszenie, nie wynika jednoznacznie, więc nie obrażałbym się na żadne z tych podejść. Mógłbym, gdybym wiedział więcej. –

+0

Operacje IMHO, które nie zmniejszają liczby zwróconych krotek, są wolniejsze w DB niż w Delphi. –

5

jak jest mniej zasobów czasochłonne i optimum, w celu dokonania podziału w zapytaniu SQL (może procedurę Store) lub obliczyć wartość w kodzie dla tego pola (po stronie serwera)?

Nie powinno to mieć znaczenia. Większość czasu będzie przeznaczona na obliczenie i przesłanie 100 000 wierszy.

7

Przy takiej skalarnej operacji różnica wydajności będzie banalna. Zrób to, co jest semantycznie bardziej uzasadnione lub wygodniejsze.

4

Jeśli wydajność jest taka sama, robiłbym to w miejscu, gdzie byłby najbardziej przyjazny w utrzymaniu/konfiguracji. Jeśli baza danych wymaga dedykowanego okna konserwacji (np. W sobotę o północy) do zmiany metadanych, wybrałbym rozwiązanie dla klienta lub warstwy pośredniej przez procedurę przechowywaną.

+1

Bardzo dobry punkt. Chociaż zgadzam się z innymi, że prawdopodobnie byłoby to bardziej wydajne, aby to zrobić na serwerze, może być o wiele bardziej praktycznym rozwiązaniem, gdy można szybko dostać się w jego ręce i wprowadzić zmiany. W niektórych środowiskach zmiany na pulpicie są łatwe, a zmiany serwera (poza normalnym cyklem wydawania) wymagają podpisu VP! –

+0

Strona Flip: ponowne udostępnianie aplikacji do 3000 użytkowników, jeśli zmiana obliczeń może być bardziej kłopotliwa niż uzyskanie zatwierdzenia zmiany bazy danych. –