Optymalizacja zapytań SQL


30 września 2011 / Michał Kortas


Budując własne aplikacje webowe, oparte zazwyczaj na bazach danych (nie ważne, czy na darmowym MySQL, czy komercyjnym Microsoft SQL Server), często zadajemy sobie pytanie: Jak zoptymalizować użyte zapytania? Jakimi zasadami się kierować? Jak poprawnie i elastycznie posługiwać się językiem SQL

Słowem wstępu

Każdy typ bazy danych jest inny, przez co wypracowanie sobie wydajnego schematu zazwyczaj zabiera sporo czasu. Pomimo tego, zalecamy prowadzenie własnych eksperymentów, ponieważ czas włożony w poszukiwanie własnego rozwiązania, zwróci się nam niejednokrotnie. Duże znaczenie ma również serwer, im wydajniej pracuje, tym lepsze będą efekty zmian. Złotego środka jak nie było, tak nie ma. Zbyt wiele czynników wpływa na ogólny, końcowy wynik. Nie mniej jednak, poniżej przedstawiam kilka naprawdę pożytecznych porad. Zapraszam do lektury.

Intuicyjne nazewnictwo

Wbrew pozorom, przyda się także nam. Ta podstawowa zasada, powtarzana od lat, jest naprawdę ważna. Kiedy powrócimy po miesiącach do starego projektu, na 98% nie będziemy pamiętać, jak nazywała się ta, czy tamta tabela. Warto określić sobie standardowo wykorzystywany schemat. Może być to pomocne nie tylko dla nas, ale również dla osób, które zostaną wprowadzone w tajniki kodu w późniejszym czasie, przez co zwiększy się czytelność tego, co wcześniej napisaliśmy. Warto również odpowiednio komentować najważniejsze, kluczowe linijki. Powód? Taki sam, jak powyżej.

Nazwy kolumn zamiast symbolu gwiazdki (*)

Popularne polecenie „SELECT * FROM nazwa_tabeli” wybiera wszystkie kolumny ze wskazanej tabeli  w naszej bazie danych – często niepotrzebnie. Dobrym zwyczajem jest sprecyzowanie tylko tych bloków danych, które są nam naprawdę konieczne. Każde dodatkowe polecenie wydłuża czas, w którym zostanie ono wykonane. Poprawnie zatem będzie napisać „SELECT imie, nazwisko FROM nazwa_tabeli„.

Indeksy

Jeżeli wprowadzone zapytanie ma wyświetlić tylko niewielki procent danych umieszczonych w bazie, zawsze indeksuj umieszczane w niej dane. 

  • Za pomocą poleceń WHERE, ORDER BY i GROUP BY wykonaj testy, które pomogą Ci utworzyć odpowiedni indeks. Analiza wyników będzie w tym wypadku najważniejsza. 
  • Staraj się tworzyć wąskie indeksy, tzn takie które obejmują jak najmniejszą liczbę kolumn. Ograniczy to użycie dysku i zwiększy wydajność.
  • Lepiej jest tworzyć indeksy dla pól numerycznych, aniżeli tekstowych. Zajmują one mniej pamięci.
  • Jeśli pole wyświetla bardzo zakrojone wyniki (np. płeć, stan cywilny) nie warto dla takich tworzyć indeksu.

Zaplanuj swoje działanie

Za pomocą polecenia EXPLAIN PLAN możesz przyjrzeć się planowi wykonania zapytania. Z planu wykonania zapytania można odczytać jakie indeksy będą użyte, które tabele będą w całości skanowane, jaka będzie kolejność ich wykonania. 

O użytych powyżej poleceniach warto poczytać na forach bazodanowych, lub innych profesjonalnych źródłach takowej wiedzy.



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.