Podstawy
4 godz. 8 min · Bazy Danych · Full-stack i Programowanie
Pierwszy rozdział wprowadza w historię powstania języka. Wspomnimy o standardach, wykorzystywanych wersjach i podzbiorach SQL’a. Zaraz potem wskoczymy w pierwsze poważne operacje, które pozwolą na pełny cykl tworzenia, zasilania bazy danych i wyciągnięcia z niej wybranych informacji. Rozwikłamy też tajemniczy akronim - CRUD.
Skoro potrafimy już tworzyć bazę i tabele, w które możemy wstawić nowe wiersze, dowiemy się więcej o bardzo ważnej funkcji bazy danych: weryfikacji danych. Zostaną zaprezentowane mechanizmy i techniki, które pomogą utrzymać spójność danych.
W kolejnych lekcjach znajduje się opis serca SQL’a, czyli polecenia wybierającego dane i możliwości i opcji z nim związanych. Od przekształcenia bazy danych w prosty kalkulator, aż do warunków filtrowania wybieranych danych (klauzulą WHERE), sortowania ich (klauzulą ORDER BY), czy ograniczania dużych zestawów wynikowych - w tym wsparcia do paginacji.
SQL jest językiem obsługi relacyjnych baz danych. Dlatego najwyższy czas, aby wspomnieć o relacjach i tym w jaki sposób rozszerzają one możliwości wyszukiwania danych oraz pozwalają zobrazować powiązania między danymi w bazie. Dowiesz się o różnych rodzajach połączeń między tabelami i jak te połączenia (zwane JOIN’ami) pozwalają wybrać to, czego potrzebujesz.
Kolejny rozdział dotyczy grupowania danych (wykorzystując klauzulę GROUP BY) i związanych z tym nowymi możliwościami. Dowiesz się tutaj też w jaki sposób agregować pogrupowane dane i jak takie zagregowane dane filtrować.
Przekonasz się, w jaki sposób można zapamiętywać trudne lub często wykonywane zapytania, wykorzystując do tego widoki (VIEWS) i jak można poprawić wydajność pobierania z nich danych. Przykładowo zastosujemy widoki zmaterializowane (MATERIALISED VIEWS). W tym rozdziale przećwiczysz też możliwość zapisywania danych przez widoki.
Z baz danych korzysta zwykle wielu użytkowników. Aby operacje, które wykonują na wspólnej bazie nie spowodowały nieoczekiwanych konsekwencji, wykorzystuje się mechanizm transakcji. W tym rozdziale wytłumaczymy Ci w jaki sposób użytkownicy mogą modyfikować równolegle te same dane. Tutaj też dowiesz się o poziomach izolacji transakcji i jak używać ich w różnych sytuacjach bazodanowych.
Przy pracy z większą ilością danych, bardzo szybko doświadczysz spowolnienia wykonywania zapytań. O tym jak je przyspieszyć dowiesz się właśnie w tym rozdziale. Zwiększanie wydajności zapytań jest tematem rozległym i zaawansowanym. Tutaj będziesz miał szansę poznać podstawy, w tym - po co są i jak używać indeksów, w jaki sposób analizować jak zapytania są wykonywane i jakie jeszcze są metody wydajniejszego odczytywania danych.
Kurs jest dla osób początkujących, rozpoczynających przygodę z bazami danych. Nie wymaga się znajomości SQL'a ani zaawansowanej wiedzy dotyczącej baz danych. Warto wiedzieć co to są relacyjne bazy danych. Dobrze mieć dostęp do ulubionego silnika bazy danych, ale nie jest to wymagane.
Teraz jak już wiesz co to są indeksy i
jak działają mogę pokazać ci jak się tworzy indeksy i zademonstrować
ich przydatność no to teraz do
bazy żeby dobrze zilustrować przydatność indeksów potrzebujesz
wygenerować dużą ilość danych możesz zrobić to na dwa sposoby zresztą
możesz je wykorzystać niezależnie pierwszy
sposób niezależny od środowiska w którym pracujesz to wykorzystanie
zapytania do wygenerowania danych jest to zapytanie które wstawia rekordy
do tabeli big data a pobiera je z
zapytania które wykorzystuje nasz widok random strings
do kolumny big number będą wstawiane losowe duże
liczby do kolumny sam tekst będą wstawiane losowe
ciągi znaków z widoku random strings i
do kolumny random price będzie generowana losowa cena
czyli wartość liczbowa z dwoma miejscami po przecinku na
końcu możemy dodać zapytanie które nam pokaże ile
już rekordów mamy w naszej tabeli wykorzystując takie zapytanie
można wygenerować około 10 000 rekordów jak
widać uruchamiając je kilkadziesiąt razy możesz wypełnić tabelę
big data kilkuset tysiącami rekordów generowane
w ten sposób zestawy danych nie są zbyt duże i
zawierają tylko kilka kolumn ale jakieś pół miliona takich rekordow
powinno wystarczyć nawet na bardzo szybkim sprzęcie żeby
zapytania trwały już kilkaset milisekund to będzie całkowicie
wystarczające dla naszej demonstracji drugi sposób jest
dla tych którzy wykorzystują bazę postgres w tym kursie jest
trochę szybszy możesz wykorzystać polecenie copy from do wczytania
danych z pliku tekstowego w formacie csv dostępnego w repozytorium
do kursu dla tego rozdziału w moim przypadku akurat
to było na dysku e w podkatalogu eduweb kurs
tu musisz wpisać miejsce do którego sklonowałeś
swoje repozytorium do kursu a następnie podać ścieżkę
do rozdziału siódmego uprzednio wykonując
polecenie git checkout 07.1 bo
tak się nazywa branch na którym jest ten plik z danymi można
to zapytanie odpalić i już po chwili 400
tysięcy rekordów jest wczytane trzeba
poczekać tylko 12 sekund no to oczywiście zależy od sprzętu
na którym jest on uruchamiany zacznę od prostego
zapytania które wybiera średnią wartość losowej
ceny z naszej dużej tabeli zobaczmy ile trwa
takie zapytanie 230 milisekund
to jest zapytanie oczywiście na całym w zbiorze danych ten czas może być
różny w twoim przypadku natomiast skupiamy się głównie na różnicach
tych czasów tak zauważ że to samo zapytanie uruchomione
kilka razy ma różne czasy ale
one oscylują w miarę wokół jakichś 200 milisekund
teraz dołóżmy do tego może ograniczenie
niech to będzie 200 ta wartość i
zobaczmy ile trwa takie zapytanie podobnie około
200 milisekund a teraz stworzymy indeks
na kolumnie random price tabeli big data syntax
jest create index i nazwa on tabela i
w nawiasach kolumna na której będzie założony index nazwy
indeksów zwyczajowo tworzy się używając właśnie nazwy tabeli i
kolumny na której będzie dex index się
stworzył i teraz możemy wrócić do naszego zapytania i zobaczyć ile
czasu stworzony indeks widać po lewej stronie 200
indeksów i jeżeli uruchomimy to zapytanie to ono trwa
koło 120 milisekund więc trochę szybciej niż oryginalne
prawie prawie dwa razy szybciej zadania
do przepracowania tym razem mając podane zapytanie wybierające
rekordy z tabeli big data dla wartości
w kolumnie big number w podanym przedziale twoje zadanie stworzyć indeks
który przyspieszy działanie tego zapytania jeżeli już uda
ci się taki jak stworzyć możesz porównać swoje rozwiązanie z
tym które przedstawię na początku następnej lekcji
Zapytanie na dużym zestawie danych · 3 min
-- najpierw zapytanie na dużej ilości danych
SELECT avg(random_price) FROM big_data; -- czas wykonania zapytania, na przykład ok. 200 msOgraniczenie selekcji warunkiem WHERE · 4 min
-- ograniczamy selekcję warunkiem WHERE
SELECT avg(random_price) FROM big_data WHERE random_price < 200; -- czas wykonania zapytania, np. ok. 170 msZałożenie indeksu na kolumnie random_price · 4 min
-- zakładamy indeks na kolumnę po której jest filtrowanie (warunek WHERE)
CREATE INDEX big_data_random_price_idx ON big_data (random_price);Ponowne zapytanie (przyspieszone) · 4 min
-- jeszcze raz zapytanie z selekcją (tym razem przyspieszone)
SELECT avg(random_price) FROM big_data WHERE random_price < 200; -- czas wykonania zapytania, np. ok. 130 ms