TeamQuest Blog

Dobre praktyki przy pisaniu zapytań SQL

Dobre praktyki przy pisaniu zapytań SQL

Marcin Sarna , 26.04.2021 r.

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, i LIMIT swoje wyniki. Zachowaj zastosowany LIMIT 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.

  1. 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.
  2. WHERE filtruje dane.
  3. GROUP BY agreguje dane.
  4. HAVING filtruje zagregowane dane, które nie spełniają kryteriów.
  5. SELECT przechwytuje kolumny i deduplikuje wiersze jeżeli wywołasz funkcję DISTINCT.
  6. UNION scala wybrane dane w zbiór wyników.
  7. ORDER BY sortuje wyniki.

Może zainteresują Cię też popularne błędy w zapytaniach SQL?

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej