Dostrajanie wydajności SQL
Dostrajanie wydajności SQL to proces optymalizacji zapytań SQL, aby zapewnić ich jak najszybsze wykonanie. Istnieje wiele czynników, które wpływają na wydajność zapytań SQL, takich jak liczba zapytań o tabele, rozmiar i liczba kolumn w tabelach oraz indeksy w tabelach.
SQL jest kluczowym komponentem wielu systemów baz danych i jest dobrze znanym językiem do wykonywania zapytań, aktualizowania i zarządzania danymi.
Dostrajanie wydajności SQL jest ważnym tematem do opanowania, ponieważ może pomóc w skalowalności i szybkości zapytań.
W tej sekcji omówimy różne sposoby strojenia SQL.
Każdy z nas zawsze chce szybkiej odpowiedzi w procesie odzyskiwania danych. Musimy więc zaprojektować dobrą bazę danych, która zapewni najlepszą wydajność podczas manipulacji danymi, co przełoży się na najlepszą wydajność aplikacji.
Jednak nie ma prostego sposobu na zdefiniowanie najlepszej wydajności, ale możemy wybrać wiele sposobów poprawy wydajności zapytań SQL, które mieszczą się w różnych kategoriach, takich jak tworzenie indeksów, użycie sprzężeń i przepisanie podzapytania w celu użycia JOIN itp.
Jako programista wiemy, że dowolne zapytanie SQL można napisać na wiele sposobów, ale powinniśmy postępować zgodnie z najlepszymi praktykami/technikami, aby osiągnąć lepszą wydajność zapytań. Niektóre z nich zostały wyróżnione poniżej:
- Użyj EXISTS zamiast IN, aby sprawdzić istnienie danych.
2. Unikaj * w instrukcji SELECT. Podaj nazwy kolumn, których potrzebujesz.
3. Wybierz odpowiedni typ danych. Np. Aby przechowywać ciągi, użyj varchar zamiast typu danych tekstowych. Użyj typu danych tekstowych, gdy potrzebujesz przechowywać duże dane (ponad 8000 znaków).
4. Unikaj nchar i nvarchar, jeśli to możliwe, ponieważ oba typy danych zajmują tylko podwójną pamięć jak char i varchar.
5. Unikaj NULL w polu o stałej długości. W przypadku wymogu NULL użyj pola o zmiennej długości (varchar), które zajmuje mniej miejsca na NULL.
6. Unikaj klauzuli. Klauzula „have” jest wymagana, jeśli chcesz dalej filtrować wynik agregacji.
7. Utwórz indeksy klastrowane i nieklastrowane.
8. Utrzymuj mały indeks klastrowy, ponieważ pola używane w indeksie klastrowym mogą być również używane w indeksie nieklastrowym.
9. Najbardziej selektywne kolumny powinny być umieszczone najbardziej na lewo w kluczu indeksu nieklastrowego.
10. Usuń nieużywane Indeksy.
11. Lepiej tworzyć indeksy na kolumnach, które mają wartości całkowite zamiast znaków. Wartości całkowite zużywają mniej narzutów niż wartości znakowe.
12. Używaj sprzężeń zamiast zapytań podrzędnych.
13. Użyj wyrażeń WHERE, aby ograniczyć rozmiar tabel wynikowych tworzonych za pomocą sprzężeń.
14. Użyj TABLOCKX podczas wstawiania do tabeli i TABLOCK podczas łączenia.
15. Używaj WITH (NOLOCK) podczas wyszukiwania danych z dowolnej tabeli.
16. Użyj SET NOCOUNT ON i użyj TRY-CATCH, aby uniknąć zakleszczenia.
17. Unikaj kursorów, ponieważ kursor działa bardzo wolno.
18. Użyj zmiennej Table zamiast tabeli Temp. Korzystanie z tabel Temp wymagało interakcji z bazą danych TempDb, co jest czasochłonnym zadaniem.
19. Jeśli to możliwe, użyj UNION ALL zamiast UNION.
20. Użyj nazwy schematu przed nazwą obiektu SQL.
21. Używaj procedury składowanej do często używanych danych i bardziej złożonych zapytań.
22. Staraj się, aby transakcja była jak najmniejsza, ponieważ transakcja blokuje przetwarzanie danych w tabelach i może powodować zakleszczenia.
23. Unikaj prefiksu „sp_” z nazwą procedury składowanej zdefiniowanej przez użytkownika, ponieważ serwer SQL najpierw przeszukuje procedurę zdefiniowaną przez użytkownika w bazie danych master, a następnie w bazie danych bieżącej sesji.
24. Unikaj stosowania nieskorelowanych podzapytań skalarnych. Użyj tego zapytania jako oddzielnego zapytania zamiast części głównego zapytania i zapisz dane wyjściowe w zmiennej, do której można się odwoływać w głównym zapytaniu lub późniejszej części partii.
25. Unikaj funkcji z wartościami przechowywanymi w wielu instrukcjach (TVF). Multi-statement TVF są droższe niż wbudowane TVF.
Jak widzieliśmy powyżej, w SQL Server istnieje kilka kroków, które można podjąć, aby poprawić wydajność zapytań i bazy danych jako całości. Istnieje wiele kroków, które będą miały zastosowanie do innych RDBMS, jak również do ORACLE.
- Użyj EXPLAIN PLAN lub AUTOTRACE, aby przeanalizować plan wykonania swoich zapytań i zidentyfikować wszelkie problemy ze sposobem ich wykonania.
- Użyj wskazówki INDEX, aby określić, który indeks powinien być używany przez optymalizator dla konkretnego zapytania.
- Rozważ użycie wskazówek, takich jak FULL lub INDEX_FFS, aby zmusić optymalizator do użycia odpowiednio pełnego skanowania tabeli lub szybkiego pełnego skanowania indeksu.
- Użyj wskazówki OPTIMIZER_MODE, aby określić określony tryb optymalizacji dla zapytania.
- Rozważ użycie zmaterializowanych widoków do wstępnego obliczania i przechowywania często używanych danych, co może poprawić wydajność zapytań uzyskujących dostęp do tych danych.
- Użyj pakietu DBMS_STATS do analizowania i gromadzenia statystyk dotyczących bazy danych i jej obiektów, co może pomóc optymalizatorowi w podejmowaniu bardziej świadomych decyzji podczas tworzenia planów wykonania.
- Rozważ użycie partycjonowania do podzielenia dużych tabel na mniejsze, łatwiejsze w zarządzaniu części, co może poprawić wydajność zapytań uzyskujących dostęp do tych tabel.
- Użyj narzędzia SQL Tuning Advisor, aby zidentyfikować i naprawić wszelkie potencjalne problemy z wydajnością instrukcji SQL.
- To tylko kilka z wielu technik, których możesz użyć, aby poprawić wydajność zapytań i bazy danych Oracle SQL. Należy pamiętać, że konkretne kroki, które należy wykonać, będą zależeć od konkretnej bazy danych i obciążenia.
- W przypadku problemów z wydajnością zawsze warto skonsultować się z administratorem bazy danych lub innymi ekspertami.
Wiele sposobów bezpłatnej nauki GCP z Google Cloud w okresie świątecznym
Rozumieć _
Polecenia systemu Linux do nauki w chmurze
Miłej lektury… Miłej nauki!

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































