Złożone zapytania SQL doskonale nadają się do tego, aby wyszukiwanie w bazie danych było bardzo szczegółowe i elastyczne, ale mogą być również trudne do zrozumienia i prawie niemożliwe do debugowania — i równie dobrze możesz zapomnieć o ich ponownym użyciu.
Gdy zapytania wykraczają poza standardowe polecenia SELECT i WHERE, może się nawet okazać, że wydajność programu SQL Server zaczyna spadać, ponieważ optymalizatory zapytań mają problemy z przetwarzaniem długich, złożonych zapytań.
Jeśli zauważysz, że Twoje zapytania SQL wykorzystują nadmierną liczbę złożonych sprzężeń i podzapytań, zagnieżdżają zapytania w klauzulach WHERE i polegają na wielu klauzulach AND i OR, prawdopodobnie jest to dobry moment, aby cofnąć się i poszukać sposobów na zminimalizować część złożoności.
Wskazówki dotyczące minimalizacji złożoności zapytań SQL Server
Jak wspomnieliśmy powyżej, optymalizatory zapytań SQL Server nie przepadają za złożonymi zapytaniami SQL. Oto pięć sposobów na uproszczenie zapytań, aby można je było zoptymalizować pod kątem lepszej wydajności.
1. Wyeliminuj klauzule OR, jeśli to możliwe
Najprostszym sposobem, aby zapytania były mniej złożone, jest eliminowanie klauzul OR, gdy tylko jest to możliwe. Ponieważ OR jest inkluzywny, SQL Server musi przetwarzać każdy składnik klauzuli osobno, co naprawdę spowalnia operacje.
Gdy nie można usunąć OR, następną najlepszą opcją jest rozbicie długich, złożonych zapytań na mniejsze. Wydaje się nieco sprzeczne z intuicją, że przetwarzanie większej liczby zapytań jest szybsze niż przetwarzanie jednego, ale jeśli chodzi o LUB, lepiej jest skorzystać z wielu zapytań.
2. Precyzyjne wyszukiwanie ciągów
SQL Server robi wiele rzeczy dobrze, ale wyszukiwanie rozmytych ciągów nie jest jednym z nich. Wyszukiwanie ciągów znaków zastępczych, zwłaszcza w przypadku dużych tabel, jest nieefektywne i ma negatywny wpływ na wydajność.
Istnieje kilka ulepszeń, które możesz zastosować do wyszukiwania ciągów, które pomagają zminimalizować wpływ na wydajność.
- Użyj wyszukiwania wiodącego ciągu zamiast wyszukiwania z użyciem symboli wieloznacznych (tj. zmień „% For%” na „For%”)
- Zastosuj do zapytania filtry, takie jak data lub godzina, aby zmniejszyć rozmiar danych przed uruchomieniem wyszukiwania ciągów
- Zastosuj indeksowanie pełnotekstowe, aby generować indeksy, które umożliwiają elastyczne wyszukiwanie ciągów w kolumnach tekstowych
3. Uważaj na duże operacje zapisu
Duże operacje zapisu powodują rywalizację i generują wiele plików dziennika. Pozostawione bez kontroli duże operacje zapisu mogą blokować zasoby od użytkowników i powodować problemy z opóźnieniami, a także wypełniać dzienniki transakcji, a nawet pamięć fizyczną.
Ponieważ nie zawsze możesz uniknąć dużych operacji zapisu, pamiętaj, kiedy je uruchamiasz (im mniej obciążony serwer, tym lepiej) lub zmniejsz liczbę wierszy modyfikowanych na operację, aby zminimalizować ryzyko rywalizacji.
4. Wyczyść indeksy
Indeksy są jednym z głównych winowajców, jeśli chodzi o niską wydajność, ale gdy próbujesz zoptymalizować złożone zapytania SQL, indeksy wymagają specjalnych rozważań.
SQL Server ma kilka narzędzi, które informują, kiedy brakujące indeksy wpływają na wydajność zapytań. Ale zanim wskoczysz i zaczniesz dodawać indeksy, musisz określić, czy dodatkowy indeks poprawi zapytanie na tyle, aby było warte wysiłku. Na przykład, jeśli zapytanie jest wykonywane 1 milion razy dziennie, a indeks poprawia je o 25 procent, to prawdopodobnie warto. Jeśli zapytanie jest rzadko używane, może nie mieć sensu.
Kilka innych rzeczy do rozważenia przed rozpoczęciem dodawania indeksów to to, czy istniejące indeksy można dostosować tak, aby obejmowały ten przypadek użycia bez dodawania nowego oraz czy ten indeks już istnieje, ale optymalizator z jakiegoś powodu go ignoruje.
Inne sposoby, w jakie indeksy mogą wpływać na wydajność zapytań, to nadmierne lub niedostateczne indeksowanie tabel oraz tabel, które nie mają indeksu klastrowego lub klucza podstawowego. Rozwiązanie tych problemów pomoże w realizacji złożonych zapytań SQL.
5. Utrzymuj odliczanie tabeli
Za każdym razem, gdy dodajesz tabelę do zapytania, zapytanie staje się bardziej złożone. Nadmiar tabel często skutkuje słabymi planami wykonania, ponieważ optymalizator zapytań nie może działać wydajnie.
Jeśli zauważysz, że złożone zapytanie ma niską wydajność i zawiera wiele tabel, może to być jeden z tych przypadków, w których najlepszym wyborem jest podzielenie zapytania na mniejsze zapytania, ponieważ zmniejszy to część obciążenia optymalizatora.
Narzędzia dostrajania wydajności mogą pomóc zminimalizować złożoność SQL Server
Gdy złożone zapytania gubią się w optymalizatorze zapytań, często otrzymujesz nieefektywny plan wykonania, a wydajność spada. Oprócz powyższych wskazówek narzędzia do dostrajania wydajności są cennym źródłem minimalizacji złożoności zapytań SQL Server i optymalizacji wydajności.
Poniżej znajduje się kilka możliwości, których należy szukać podczas badania rozwiązań dostrajania wydajności.
Analiza planu wykonania programu SQL Server
Narzędzie do dostrajania powinno przeanalizować plan wykonania i określić, co należy zmienić, aby SQL Server mógł wykonywać operacje wydajniej.
Wizualizacja planu wykonania programu SQL Server
Narzędzie dostrajające powinno przedstawiać plan wykonania w sposób łatwy do zrozumienia i pomagający zlokalizować operacje spowalniające wykonanie.
Automatyczna optymalizacja SQL
Narzędzie do dostrajania powinno przeanalizować Twój kod SQL, a następnie automatycznie go przepisać, aż osiągnie maksymalną poprawę czasu wykonania.
Porównanie zoptymalizowanych i oryginalnych instrukcji SQL
Narzędzie do dostrajania powinno wyróżnić zmiany w instrukcji SQL, aby można było porównać wersję oryginalną i zoptymalizowaną przed wdrożeniem zmian.
Porównanie planów wykonania SQL Server
Narzędzia dostrajające powinny umożliwiać porównanie oryginalnych i zoptymalizowanych planów wykonania, aby wiedzieć, co zmieniło się między wersjami.
Dowód statystyczny
Twoje narzędzie do dostrajania powinno dostarczać danych, które pokazują, dlaczego zoptymalizowany kod SQL wykonuje się szybciej niż oryginalna instrukcja SQL.
Złożone zapytania SQL Server mogą mieć negatywny wpływ na wydajność systemu. Skorzystaj z tych wskazówek i wysokiej jakości rozwiązania do dostrajania wydajności, aby uporządkować złożoność i zoptymalizować wydajność zapytań SQL.