Jak formułować zapytania lepiej niż do tej pory.
Sprawdź oferty pracy dla speców od SQL na TeamQuest
Najpierw poprawność, potem czytelność a dopiero na końcu optymalizacja
Przedwczesna optymalizacja to stary błąd popełniany w wielu dziedzinach IT i nie inaczej jest w przypadku SQL. Unikaj więc dostrajania swojego zapytania SQL, dopóki nie wiesz, że zwraca ono dane, których szukasz. Nawet wtedy nadaj priorytet optymalizacji zapytania dopiero wówczas gdy jest ono uruchamiane często lub jeśli zapytanie przechodzi przez dużą liczbę wierszy. Ogólnie rzecz biorąc, nadaj priorytet dokładności (a więc skoncentruj się na tym czy zapytanie daje zamierzone wyniki) i czytelności (czy inni mogą łatwo zrozumieć i zmodyfikować kod), zanim zaczniesz martwić się o wydajność.
Zanim zaczniesz szukać igieł, spraw, aby stogi siana były jak najmniejsze
Dobre zapytanie to takie, które nie chce od bazy danych przeszukiwania zbyt dużej ilości informacji. Mówiąc wprost, postaraj się aby istniała konieczność przeskanowania minimalnej liczby wartości niezbędnych do pobrania wyników. Nie każ serwerowi wykonywać zbędnej pracy, ogranicz ją do minimum.
Częścią piękna SQL jest jego deklaratywny charakter. Nie musimy więc mówić bazie danych, jak pobierać rekordy. Wystarczy, że wskażemy jej grzecznie, których rekordów potrzebujemy, a baza danych powinna sobie już sama wybrać najbardziej efektywny sposób uzyskania tych informacji. W związku z tym wiele rad dotyczących poprawy wydajności zapytań odnosi się do precyzyjniejszego wyrażania swoich potrzeb przez pytającego.
Najpierw poznaj swoje dane
Zapoznaj się ze swoimi danymi, zanim napiszesz choćby jedną linię kodu. Żelazne prawo GIGO (Garbage in, Garbage out) działa zawsze więc upewnij się, że kolumna naprawdę zawiera oczekiwane przez Ciebie dane.
Opracowanie zapytania
Każdy z nas ma różne metody na napisanie dobrego zapytania. Może taki, przykładowy przepływ pracy, spodoba się Tobie?
- Przestudiuj strukturę bazy, kolumny i tabele.
- Aby zapoznać się z wartościami tabeli,
SELECT *
z tabel, z którymi pracujesz, iLIMIT
swoje wyniki. Zachowaj zastosowanyLIMIT
podczas zawężania kolumn (lub dodawania kolejnych kolumn za pomocąJOIN
). - Zawęź kolumny do minimalnego zestawu wymaganego do udzielenia odpowiedzi na Twoje pytanie.
- Zastosuj filtry do tych kolumn, które pozostały.
- Jeśli chcesz zagregować dane, zagreguj najpierw niewielką liczbę wierszy i potwierdź, że to co otrzymujesz jest zgodne z oczekiwaniami.
Ogólna kolejność wykonywania zapytań
Ważne jest też aby zrozumieć, w jaki sposób bazy danych będą wykonywać zapytania. Jest to inny porządek niż kolejność „czytania” (od lewej do prawej, od góry do dołu) używanej do tworzenia zapytania. Zauważ, że optymalizatory zapytań mogą zmienić kolejność poniższej listy, ale ogólny cykl życia zapytania SQL powinieneś mieć zawsze z tyłu głowy podczas tworzenia danego query. Ogólna zasada jest taka: im wcześniej na tej liście możesz usunąć zbędne dane do przeszukiwania, tym lepiej.
- FROM (i JOIN) pobierają tabele, do których odwołuje się zapytanie. Tabele te reprezentują maksymalną przestrzeń wyszukiwania określoną przez zapytanie. Tam, gdzie to możliwe, ogranicz zakres zapytania.
- WHERE filtruje dane.
- GROUP BY agreguje dane.
- HAVING filtruje zagregowane dane, które nie spełniają kryteriów.
- SELECT przechwytuje kolumny i deduplikuje wiersze jeżeli wywołasz funkcję DISTINCT.
- UNION scala wybrane dane w zbiór wyników.
- ORDER BY sortuje wyniki.
Może zainteresują Cię też popularne błędy w zapytaniach SQL?