Mam zapytanie do bazy danych, które może spowodować duży zestaw wyników. Klient, który wyświetla dane, odbiera dane przez sieć, więc pomysł polegał na zminimalizowaniu ilości przesyłanych danych poprzez pobranie tylko pierwszych 50 wyników z bazy danych i przesłanie ich do klienta. Następnie zapewnię możliwość przejścia do drugiej strony w celu pobrania kolejnych 50 wyników itp. (Coś podobnego, co oferuje np. Google)
Pytanie brzmi, jaki jest skuteczny sposób wdrażania stronicowania. Chcę się upewnić, że mssql używa pamięci podręcznej w jak największym stopniu i że to samo nie jest wykonywane ponownie za każdym razem, gdy zmieniam stronicowanie.
Jest więcej klientów, którzy odpytują bazę danych w tym samym czasie. Używany silnik SQL: MS SQL 2005
Moje pomysły to:
- Użyj przygotowanego statemenst sql, aby zapewnić współdzielenie planu wykonania
- użyj zmiennej ROW_COUNT, aby pobrać tylko potrzebne wiersze
Ale czy to naprawdę najskuteczniejszy sposób? A może uważasz, że lepiej byłoby pobrać cały zestaw wyników i zaimplementować stronicowanie w kodzie, który wysyła dane do klienta?
Dziękuję za twoje wskazówki!
Pozdrawiam, Tomas
źródło
To zależy od twojego środowiska. Skonfiguruję test przy użyciu obu metod i sprawdzę, która z nich będzie dla Ciebie najlepsza. Osobiście chciałbym stronę na serwerze. Im mniej danych za pośrednictwem przewodu i mniej danych w pamięci RAM klienta, tym lepiej. Jeśli możesz kontrolować specyfikacje komputera klienckiego, cały ruch odbywa się przez nienasyconą sieć LAN, a klienci zawsze szybko przeglądają wiele stron, wtedy możesz chcieć przeglądać strony u klienta.
źródło