bober70 napisał(a)
- Query podpinam do grida przy pierwszym wejściu , wykonaniu
operacji w gridzie np przy pomocy komponentu JvDBSearchEdit1
wyszukuje rekord trwa to dos długo , przy kolejnych wejściach
wyszukaniach jest szybcie - czy ja coś źle robie czy tak ma być ?
Typowe dla MS SQL - on sobie cacheuje zapytanie (zaciąga dane z dysku do pamięci) - tak na prawde wiele systemów bazodanowych zachowuje się w ten sposób - zaciąga dane z dysku do pamięci z odpowiednim znacznikiem zycia danych, po upływie którego dane są automatycznie zwalniane z pamięci. Podobnie jest w przypadku procedur składowanych. Dlatego testy rzeczywistej wydajności wykonuje się po drugim odpaleniu - najlepiej z delikatnie zmodyfikowanymi warunkami zapytania - tak, żeby wynik nie poleciał z cache (bo serwer, jeżeli stwierdzi, że ma gotowy wynik dla zadanych parametrów pod ręką nie oblicza wszystkiego od poczatku, tylko tyle ile potrazebuje) - zmiana warunków wymusza na serwerze wykonanie kompletu obliczeń/operacji. Wracając - pierwsze odpalenie zawsze powoduje, że dane przepływają z dysku do pamięci. Kolejne odczyty już są szybsze, bo motor nie sięga do relatywnie wolnego nośnika danych.
bober70 napisał(a)
- Chcąc wyświetlić jakieś dane (raport) tworze w DM nowe Query z
odpowiednimi warunkami a później w tym Query sumuje odpowiednie
wartości w pętli. Wyszukanie danych w Query trwa np 2 sekundy, pętla
obliczeniowa ( musi być pętla bo sumuje odpowiednie pola do zmiennych
na różnych warunkach) wykonuje się bardzo szybko (podpięty
ProgressBar). Po tym jak ProgressBar osiągnie 100 % muszę czekać dość
długo aż zobaczę wynik - czy ja coś źle robie czy tak ma być ?
Zawsze jest tak, że przetworzenie zapytania to jedno, a przesłanie wyników to drugie. Nie do końca jestem przekonany, że sumowanie MUSI odbywać się po stronie klienta (a wręcz zakładam, że skoro jak sam napisałeś zaczynasz - to pewnie nie znasz wszystkich możliwosci SQL). Ale - nie znam specyfiki Twojego programu więc nie będę zgadywał. Generalnie w Management Studio bodajże pod Ctrl+L masz fajne narzędzie do graficznego obrazowania EXPLAIN - to narzędzie rewelacyjnie pokazuje gdzie popełniasz błędy w postaci np skanowania tabel (zamiast przeszukiwania po indeksie).
Poza tym - warto rozważyć zastosowanie klauzuli NO COUNT ON - jeżeli ilość rekordów zwróconych przez DataSet nie jest dla ciebie kluczowa.
Generalnie MS SQL to mądre urządzenie.