2010-09-21 23 views
17

Jak mogę porównać dwa zapytania X i Y i powiedzieć, że X jest lepsza niż Y, kiedy obie biorą prawie taki sam czas w małych przypadkach?Jak porównać dwa zapytania?

Problem polega na tym, że mam dwa zapytania, które powinny działać na bardzo dużej bazie danych, więc uruchomienie i ocena nie jest całkiem dobrą opcją. Dlatego stworzyliśmy małą bazę danych do przeprowadzenia niektórych testów. Ocena, które zapytanie jest lepsze, jest problemem, ponieważ na naszej bazie testowej działają one niemal w tym samym czasie (około 5 minut). Poza czasem potrzebnym do powrotu, co jest kolejnym sposobem mierzenia, jak dobre jest zapytanie?

+0

Witam po prostu wstawiam to pytanie MSSQL – User7354632781

Odpowiedz

26
SET STATISTICS IO ON 
SET STATISTICS TIME ON 

Uruchom zapytania i porównaj odczyty logiczne dla różnych tabel i czasów wykonania.

+8

@CombatCaptain Możesz również zestawiać porównania zapytań w SSMS i naciskać 'CTRL + M' (w tym aktualny plan wykonania), a następnie' F5'. Następnie najedź kursorem na pierwszy węzeł w zakładce "Rzeczywisty plan wykonania" i przeczytaj "Szacowany koszt podtytułu". –

+2

Te instrukcje nie wydają się być ogólnie obsługiwane. BŁĄD [15001] Wystąpił błąd składniowy w lub wcześniej: USTAW STATYSTYKI IO WŁ – dokaspar

2

Czy przeanalizowałeś plany zapytania? Jeśli zapytania zwracają te same dane i trwają tyle samo czasu, aby wykonać, domyślam się, że plany kwerend będą prawie identyczne, co oznacza, że ​​nie ma znaczącej różnicy między tymi dwoma zapytaniami.

Czy wzięto również pod uwagę, że zapytania zmieniają się w zależności od zmian rozmiaru bazy?

Zastanawiam się, czy przedwcześnie optymalizujesz kod. Moim zdaniem, jeśli mam zapytanie, które działa i jest zrozumiałe, mogę rozwiązywać problemy z wydajnością za pośrednictwem indeksów. Zwykle jest to łatwiejsze niż zmiana zapytań w celu zwiększenia wydajności.

3

Jak już wspomniano, sprawdź plany wykonania.

Co ważne, porównuj dokładnie dwa zapytania, usuwając pamięć podręczną pomiędzy kolejnymi uruchomieniami, aby upewnić się, że nie widzisz wypaczonych wyników z powodu działania danych już buforowanych (nie działają na serwerze produkcyjnym):

DBCC DROPCLEANBUFFERS -- clear proc plan cache 
DBCC FREEPROCCACHE -- clear data cache 

Następnie zwykle sprawdzam odczyty, zapisy, procesor i czas trwania w celu porównania.

Bardzo ważne jest, aby testować z wolumenami danych na poziomie produkcyjnym (a najlepiej, aby zobaczyć, jak będzie skalowany). W tych tomach naprawdę widać różnicę w wydajności. Testowanie z małymi wolumenami danych może później otworzyć się na problemy.

0

Ocena skuteczności kwerendy na znacząco innym zbiorze danych ma zazwyczaj niewielki sens. Plany zapytań i ich skuteczność może się znacznie różnić w zależności od statystyk danych.

Aby uzyskać realistyczne prognozy, potrzebujesz bazy danych tak blisko rzeczywistej jak to tylko możliwe. Co najważniejsze, weź kopię "wielkiej bazy danych" i dostosuj do niej swoje zapytania.

Powiązane problemy