Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Potrójne złącze wewnętrzne z ponad 10.000 rzędami i zastosowaniem stoisk do obliczeń boleni

Przeanalizujmy to, jednocześnie pamiętając, że SQL ma klauzulę ORDER BY:-

do until rs.eof 
  response.flush 
  counter = counter + 1 

  ' A LOT of calculations and putting in array... 

  rs.movenext 
loop

Zwróć uwagę na Response.Flush , pierwszą rzeczą, którą bym zrobił, to się tego pozbyć. Prawdopodobnie będziesz musiał zwiększyć Limit buforowania odpowiedzi ASP (w menedżerze IIS). Flush do tej pory wysyła wygenerowaną zawartość do klienta, czeka na potwierdzenie odbioru wszystkich wysłanych pakietów przed zakończeniem. Zgaduję, że właśnie tam spędza się 90% z 5+ minut.

Teraz "DUŻO obliczeń". VBScript nie jest znany ze swojej wydajności. Ten kod może zająć trochę czasu. W niektórych przypadkach niektóre obliczenia można wykonać znacznie lepiej w SQL niż w skrypcie, więc jest to jedna z opcji. Innym byłoby zbudowanie jakiegoś komponentu skompilowanego w COM, aby wykonać złożoną pracę (chociaż konieczne jest wykonanie niektórych księgowości dla marshallingu, co może zniweczyć korzyści). Jednak może być nieuniknione, że będziesz musiał wykonywać te obliczenia w VBScript.

Teraz rs.movenext . Ta pętla oznacza, że ​​utrzymujesz otwarte połączenie i zestaw wierszy przez prawie cały czas, gdy wymagane jest przetwarzanie. Dzieje się tak, gdy serwery wysyłają bajty przez sieć do klienta, a VBScript przetwarza liczby. O wiele lepszym rozwiązaniem byłoby szybkie wyssanie całego zestawu wierszy i odłączenie od bazy danych, następnie crunch liczb i nareszcie zrzuć bufor do klienta.

Rozważ użycie odłączonego zestawu rekordów (określasz statyczny kursor po stronie klienta) lub nawet prostego GetRows metoda obiektu zestawu rekordów, która zrzuca cały zestaw wierszy do tablicy 2-wymiarowej. Oznacza to, że będziesz utrzymywać blokady na różnych stołach przez możliwie najkrótszy czas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak zobaczyć/skryptować definicje widoków systemowych?

  2. Uprawnienia Problem z uruchomieniem pakietu SSIS z Sql Job

  3. Jak skryptować procedury składowane do plików?

  4. T-SQL:Eksportuj do nowego pliku Excel

  5. ALTER TABLE na zależnej kolumnie