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

6 problematycznych zapytań, które znacznie spowalniają Twoją bazę danych

Słaba wydajność bazy danych to cierń po stronie każdego administratora baz danych. I nie zawsze jest łatwo wyizolować podstawową przyczynę problemów z wydajnością, co tylko zwiększa stres.

Dostrajanie baz danych SQL Server to świetny sposób na rozwiązanie niektórych problemów z wydajnością, ale nie zawsze jest oczywiste, gdzie należy rozpocząć proces optymalizacji. Jeśli wykluczysz miejsce na dysku, pamięć i inne elementy zabójcze wydajności sieci i sprzętu, a wydajność Twojego programu SQL Server nadal pozostaje w tyle, nadszedł czas, aby zagłębić się w zapytania.

Niezoptymalizowane zapytania mogą powodować niezliczone problemy z wydajnością Twoich systemów. Z drugiej strony, kilka typowych błędów zapytań jest odpowiedzialnych za większość pogorszenia wydajności bazy danych.

Jeśli w Twoich zapytaniach występuje którykolwiek z tych sześciu problemów, przygotuj się na poważne dostrojenie wydajności.

Zadanie problemu nr 1:Wyrażenia podobne do wiodących symboli wieloznacznych

Wiodące symbole wieloznaczne uniemożliwiają MySQL korzystanie z indeksów, wymuszając pełne skanowanie tabeli, nawet jeśli zindeksowano pole w tabeli. Skanowanie wszystkich wierszy w tabeli znacznie spowalnia dostarczanie wyników zapytania, więc wyeliminuj wiodący symbol wieloznaczny, aby zwiększyć wydajność.

Problem Zapytanie nr 2:Kolumny nieindeksowane używane w klauzulach „Gdzie” i „Grupuj według”

Indeksowanie kolumn pomaga szybciej zwracać wyniki zapytania, ponieważ eliminuje potrzebę pełnego skanowania tabel. Indeksowanie pomaga również sortować rekordy po ich zwróceniu i gwarantuje, że te rekordy są jednoznacznie identyfikowalne, co jest szczególnie przydatne w tabelach zawierających więcej niż 10 wierszy.

Aby uzyskać trochę perspektywy, rozważ uruchomienie instrukcji „wyjaśnij” w analizie zapytań przed i po indeksowaniu. Dzięki temu dowiesz się, ile wierszy skanowania właśnie zaoszczędziłeś.

Problem Pytanie nr 3:Podobają się stwierdzenia, które używają operatora „lub” zamiast klauzuli unijnej

Uruchamianie zapytań przy użyciu operatora porównania „lub” na polach lub kolumnach w tabeli może być przydatne, ale zbyt częste stosowanie „lub” w klauzuli „where” to kolejna szybka ścieżka do pełnego skanowania tabeli.

Klauzula składająca może przyspieszyć działanie zapytania SQL, zwłaszcza jeśli różne indeksy optymalizują każdą stronę zapytania. Zasadniczo operator sumy bierze wyniki dwóch szybkich, zindeksowanych zapytań i łączy je w jedno.

Problem Zapytanie nr 4:Wyszukiwania z użyciem symboli wieloznacznych

Jeśli utkniesz w sytuacji, w której musisz wyszukiwać za pomocą symboli wieloznacznych, ale nie chcesz tracić wydajności, spróbuj użyć wyszukiwania pełnotekstowego MySQL. Wyszukiwanie pełnotekstowe jest znacznie szybsze niż wyszukiwanie za pomocą symboli wieloznacznych, a podczas przeszukiwania ogromnych baz danych uzyskujesz dodatkową korzyść w postaci bardziej trafnych wyników.

Problem nr 5:niezoptymalizowany schemat bazy danych

Możesz tylko tak bardzo poprawić wydajność zapytań SQL, jeśli nie zoptymalizujesz również schematu bazy danych. Oto kilka wskazówek dotyczących ulepszeń:

Normalizuj tabele

Nadmiarowość danych zmniejsza wydajność, dlatego pamiętaj, aby przedstawić fakt w bazie danych tylko raz. Na przykład, jeśli odwołujesz się do klienta w więcej niż jednej tabeli, użyj „nazwa_klienta” tylko raz, a następnie użyj „identyfikatora_klienta” dla kolejnych odwołań.

Użyj optymalnych typów danych

Kilka ważnych punktów do zapamiętania, jeśli chodzi o typy danych:

  • Krótszy jest lepszy przy projektowaniu stołów. Na przykład użyj typu danych „TINYINT” w polu „identyfikator_użytkownika” w przypadku systemowej tabeli użytkowników zawierającej mniej niż 100 użytkowników.
  • Użyj typu danych „data_godzina”, jeśli pole oczekuje wartości daty, więc nie musisz konwertować rekordów na format daty po fakcie.
  • MySQL działa lepiej z wartościami całkowitymi niż z typami danych tekstowych, w tym varchar.

Unikaj wartości zerowych

Puste wartości w kolumnie mogą zaszkodzić wynikom zapytania, więc może być konieczne przypisanie wartości domyślnej dla pól, w których rekordy nie wymagają wartości obowiązkowej.

Nie używaj zbyt wielu kolumn

Szerokie tabele (ponad 100 kolumn) wymagają do przetworzenia dużej ilości procesora i zasobów. O ile nie musisz koniecznie uwzględniać szerokiego stołu, lepiej podzielić go na mniejsze, logiczne tabele.

Optymalizuj połączenia

Instrukcje SQL ze zbyt dużą liczbą złączeń (i złączenia ze zbyt dużą liczbą tabel) mają negatywny wpływ na wydajność. Strzelaj do nie więcej niż 12 złączeń dla każdego zapytania.

Problem Zapytanie nr 6:Niezbuforowane zapytania MySQL

Witryny i aplikacje, które wykonują wiele zapytań wybierających, skorzystają na buforowaniu zapytań MySQL. Buforowanie zapytań MySQL zwiększa wydajność podczas operacji odczytu, ponieważ buforuje zapytanie wybierające wraz z wynikowym zestawem danych i pobiera z pamięci (nie z dysku), jeśli zapytanie jest wykonywane więcej niż raz.

Dostrajanie wydajności jest niezbędne do utrzymania wysokiej dostępności baz danych SQL Server i zapewnienia zadowolenia użytkowników końcowych. Ale niestety nie zawsze jest od razu oczywiste, gdzie strojenie jest najbardziej potrzebne. Jeśli wyeliminowałeś oczywiste źródła problemów z wydajnością sieci i sprzętu, skup się na swoich zapytaniach.

Jeśli pracujesz jako DBA przez dłuższy czas, prawdopodobnie napotkałeś jedno (lub wszystkie) z tych problemów. Teraz, gdy wiesz, na co zwrócić uwagę, bądź proaktywny w swojej inicjatywie poprawy wydajności i popraw te typowe problemy związane z zapytaniami, aby móc czerpać korzyści z optymalizacji zapytań SQL Server.


  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 używać aliasu w klauzuli where?

  2. Wyjaśnienie SQL Server (localdb)\v11.0

  3. Dlaczego nie mogę użyć aliasu w kolumnie count(*) i odwołać się do niego w klauzuli o?

  4. ZAMÓW WEDŁUG DATY wyświetlając najpierw NULL, a następnie najnowsze daty

  5. Automatyzacja przetwarzania modelu tabelarycznego baz danych usług Analysis Services (SSAS) w programie SQL Server