Dlaczego indeks przyśpiesza wykonywanie zapytań SQL?

  Рет қаралды 4,105

nieinformatyk

nieinformatyk

Күн бұрын

✅Zastosowanie indeksów w bazie danych sprowadza się do zwiększania wydajności zapytań SQL lub prościej mówiąc do skracania czasu wykonania polecenia SELECT. W tym nagraniu opowiem Ci o tym jak indeks jest zbudowany, jak działa indeks w bazie danych i o czym powinieneś dodatkowo pamiętać optymalizując zapytania SQL. Zapraszam do nauki :)
🎁 ODBIERZ PREZENTY
1) Książka o tym, jak się przebranżowić na bazodanowca: promo.podstawybazdanych.pl/
2) Lista najczęstszych błędach programistów PL/SQL: promo.plsql.pl/
== 🔗 Przydatne linki z nagrania:==
📥kod z lekcji do pobrania z dysku google: drive.google.com/file/d/1KzG_...
🏷️Co to jest indeks? • Indeks w bazie danych ...
🏷️czym jest ROWID: docs.oracle.com/en/database/o...
🏷️ścieżki dostępu do danych: docs.oracle.com/en/database/o...
== 👌 Polecam obejrzeć:==
Co to jest skrypt SQL: • Co to jest skrypt sql?...
SQL vs PL/SQL: • Odc 49: Co to jest PL/...
== ⏱️ Plan odcinka:==
00:00 wprowadzenie do odcinka
00:56 od czego zależy czas wykonania polecenia SQL
02:14 omówienie przykładu do optymalizacji SQL
03:38 czym jest indeks w bazie danych
05:58 co to jest ROWID?
07:21 omówienie przykładu - jak zadziała indeks
09:58 praktyczna prezentacja w kodzie SQL
16:13 ścieżki dostępu w Oracle(access path)
16:52 co jeszcze trzeba wiedzieć by umieć optymalizować bazę danych?
#bazodanowiec
== 👨‍💻 Poznaj mniej lepiej:==
* Moja strona: www.nieinformatyk.pl/
* Kod z odcinka: www.nieinformatyk.pl/pliki
* Facebook: / nieinformatyk
* Linkedin: / darekbutkiewicz
* Instagram: / nieinformatyk
* Twitter: / nieinformatyk
Zasubskrybuj mój kanał: kzfaq.info...
🏁 Witaj na moim kanale :)
Jestem programistą baz danych Oracle oraz developerem hurtownii danych (ETL). W tym miejscu dzielę się z oglądającymi wiedzą dotyczącą relacyjnych baz danych, praktycznych technik pisania SQL oraz optymalizacji kodu PL/SQL. Jeśli chcesz zdobyć praktyczną i rzetelną więdzę o bazach danych to trafiłeś na właściwe miejsce.
🚨 Więcej informacji o bazach danych znajdziesz zupełnie ZA DARMO na www.nieinformatyk.pl i nieinformatyk.pl/strona/plsql...
📧 Masz pytanie, prośbę, sugestię? Pisz śmiało na kontakt@nieinformatyk.pl

Пікірлер: 29
@agniesia634
@agniesia634 Жыл бұрын
Świetnie tłumaczysz dzięki :) Chętnie zobaczyłabym odcinek o rodzajach indeksów.
@nieinformatyk
@nieinformatyk Жыл бұрын
Ok - dzięki za propozycję nagrania :) Dodałem do listy tematów.
@nieinformatyk
@nieinformatyk Жыл бұрын
Właśnie nagrałem materiał o który prosiłaś. Daj znać czy Ci się podoba🙂 kzfaq.info/get/bejne/g6ucZthztbrOep8.html
@barbaralewczuk9620
@barbaralewczuk9620 Жыл бұрын
Super jak zawsze:)
@nieinformatyk
@nieinformatyk Жыл бұрын
dzięki :)
@sebon11
@sebon11 Жыл бұрын
Staty, odcinek na pewno profeska jak zawsze u ciebie
@nieinformatyk
@nieinformatyk Жыл бұрын
dzięki :)
@MistrzOwiWolno
@MistrzOwiWolno Жыл бұрын
Mało jest materiałów, które muszę zostawić bo zap&*^pi..pi w pracy i wracam do nich wieczorem bo są za dobre by zapomnieć je obejrzeć. Szacun.
@nieinformatyk
@nieinformatyk Жыл бұрын
Dzięki -> i piątek staje się jeszcze piękniejszy
@pawewiatrak5684
@pawewiatrak5684 Жыл бұрын
A co w przypadku gdy zrobimy np warunek id > 50 czy wtedy znaczenie ma pk? Czy bez rowid przeszukiwana będzie cała tabela?
@nieinformatyk
@nieinformatyk Жыл бұрын
Bez indeksu zawsze jest czytana cała tabela(wyjątkiem jest tabela partycjonowana, kiedy mamy opcję czytać partycję tabeli). W sytuacji warunku id>50 baza danych może wykorzystać ścieżkę index range scan - pod warunkiem, że będzie istniał indeks. Oczywiście kluczowa będzie selektywność warunku, tzn. informacja o tym jak duży % rekordów wybieramy z tabeli. Jeśli książka ma 500 stron a Ty napiszesz: wybierz strony > 50 to baza raczej przeczyta całą książkę(tabelę). Jeśli warunek to strony większe niż 498 to baza raczej wykorzysta indeks, bo wybierasz 2/500 rekordów :)
@maciejsobolewski7675
@maciejsobolewski7675 8 ай бұрын
Czyli jakbysmy mieli zapytanie Select PEEnsja from Tabela where nazwisko = "Pawelec" to silnik bazodanowy leci od poczatku tabeli i dopiero gdy natrafi na te nazwisko zwaraca wynik ( i przechodzi tez po calej tabeli nawet jak ten rekord jest gdzies na poczatku),a przy uzyciu indeksu, indeks od razu sie odwoluje do tego rowid? Dobrze rozumiem? :)
@nieinformatyk
@nieinformatyk 8 ай бұрын
Silnik czyta całą tabelę nawet jak pierwszy rekord spełnia warunek nazwisko = "Pawelec", ponieważ nie ma pewności, że takich rekordów jest kilka, np. ostatni rekord. I tu jest przewaga indeksu, bo jest posortowany - i wiadomo, że ja kolejna wartość się różni to więcej taka wartość jak Pawelec nie wystąpi. Gdy indeks dodatkowo jest unikalny to gdy natrafiasz na pierwszą pozycję to kończysz czytanie, bo wiesz, że jest tylko jeden taki rekord. Gdy indeks jest nieunikalny to czytasz dopóki warunek jest prawdziwy. Czytanie indeksu skutkuje tak naprawdę tworzeniem zbioru ROWID-ó do odczytu potem z tabeli. Nie jest tylko powiedziane, że baza ma ROWID to idzie do tabeli(BY ROWID). Równie dobrze najpierw może zebrać wszystkich ROWID-y a potem na raz odczytać z tabeli te rekordy(BY ROWID BATCHED): www.ktexperts.com/difference-between-rowid-and-rowid-batched-in-oracle/
@maciejsobolewski7675
@maciejsobolewski7675 8 ай бұрын
@@nieinformatyk czyki jeśli jest np. dwóch Pawelcow to w indeksie są to dwa rekordy z dwoma rowid?
@nieinformatyk
@nieinformatyk 8 ай бұрын
@@maciejsobolewski7675 tak, ale to są różne ROWID, tzn, Pawelec ROWID1, Pawelec ROWID2
@marekgrys
@marekgrys Жыл бұрын
Jedyna uwaga szkoda że nie pokazałeś na końcu na jakimś dużym zbiorze danych gdzie wyszukiwanie trwałoby np 2 sekundy lub parę ma z indeksem lub jakieś zapytanie z join które pokazałoby optymalizację
@nieinformatyk
@nieinformatyk Жыл бұрын
To już można samemu zrobić w ramach pracy domowej :) Zasilić dane milionem rekordów, np. używając CONNECT_BY a potem wykonać 2 SELECT-y(z indeksem i bez).
@aaaa-rj6uh
@aaaa-rj6uh Жыл бұрын
Niedawno zacząłem się uczyć o bazach danych i nie rozumiem po co są te indexy w taki sposób jak ty tłumaczysz. Jeśli w tabeli tworzymy klucz główny to jednocześnie tabela w pamięci staje się posortowana i klucz działa jak wewnętrzny index tabeli(tzw Clustered index). W takim wypadku w tym przykładzie co podałeś na początku jeśli jest klucz główny baza danych z tego co rozumiem nie musi przeszukiwać całej tabeli aby znaleźć tego pracownika.
@nieinformatyk
@nieinformatyk Жыл бұрын
Ja mówiłem w moim nagraniu o standardowym i typowym dla wszystkich DBMS przykładzie czytania tabeli(nieposortowana struktura, tzw. heap organized table) za pomocą indeksu(nonclustered index), czyli dodatkowej posortowanej struktury, zupełnie oddzielnego obiektu. Ty w swoim komentarzu założyłeś błędnie, że mówiłem o clustered index(indeks jest de facto posortowaną tabelą). Wtedy rzeczywiście dodatkowy indeks niemiałby sensu, bo po co sortować coś posortowanego :) Problemem być może jest kwestia nazewnictwa indeksów, która moim zdaniem w Sql Server(bo zapewne tego RDBMS się uczysz) jest mega słaba: clustered index to nic innego jak tabela, która działa jak indeks. Czyli masz 1 obiekt: tabelę z posortowanymi rekordami po PK. W Oracle jest to nazwane dużo lepiej(index organized table). Nazwa sugeruje, że chodzi o tabelę, która przechowuje dane jak indeks. Z mojego doświadczenia wynika, że w 99% przypadków do optymalizacji używa się zwykłych indeksów(nonclustered), ponieważ w przypadku operacji DML na tabeli przebudować trzeba mały nonclustered index(czyli ten dodatkowy posortowany obiekt, który wskazuje na rekordy tabeli). Tabela ma dużo większy rozmiar(więcej kolumn), ale ponieważ nie jest posortowana to nie trzeba nic robić. Rebuild clustered index/index organized tabel trwa duuużo dłużej.
@aaaa-rj6uh
@aaaa-rj6uh Жыл бұрын
@@nieinformatyk dzięki za odpowiedź tylko założyłem tak bo z 1 normalizacji wynika że każda tabela musi posiadać klucz podstawowy i właśnie tego nie rozumiem bo w takim wypadku zawsze tabela ma ten clustered index i jest posortowana. Jak to wygląda w przypadku Oracle?
@nieinformatyk
@nieinformatyk Жыл бұрын
@@aaaa-rj6uh "1 normalizacji wynika że każda tabela musi posiadać klucz podstawowy" - to prawda, ale nie wynika z tego, że tworząc PK(klucz główny) zostanie stworzony równocześnie clustered indeks. W Oracle przy tworzeniu PK automatycznie tworzony jest indeks (nonclustered - choć w nomenklaturze oraclowej nie ma czegoś takiego jak nonclustered index. Indeks to po prostu indeks). W Sql Server z tego co widzę jest na odwrót, bo domyślnie przy PK baza tworzy clustered index: learn.microsoft.com/en-us/sql/relational-databases/tables/create-primary-keys?view=sql-server-ver16 Ma to swoje zalety: pisząc selecta na tabeli nie trzeba sięgać do indeksu, a potem tabeli(table access by ROWID), ale jak mówiłem sprawia to problemy z DML. kzfaq.info/get/bejne/huBpqamV07nXe58.html Co baza to rozwiązanie :)
@TomaszTomzik
@TomaszTomzik Жыл бұрын
No dzisiaj nie miałem się do czego przyczepić;)
@nieinformatyk
@nieinformatyk Жыл бұрын
uff.. może w kolejnym odcinku uda Ci się coś znaleźć
@coTyNiePowiesz
@coTyNiePowiesz Жыл бұрын
znowu jestem pierwszy 😁
@nieinformatyk
@nieinformatyk Жыл бұрын
Z tego co widzę to trzeci :)
@coTyNiePowiesz
@coTyNiePowiesz Жыл бұрын
@@nieinformatyk 🤔może dzisiaj i trzeci ale jutro... ale jutro 😏 jutro będę number Łan. pozdrowienia od Franka O.
@nieinformatyk
@nieinformatyk Жыл бұрын
@@coTyNiePowiesz haha, cały czas na haju :)
@dominikremto5059
@dominikremto5059 Жыл бұрын
Ale trafiłeś akurat o tym czytam i dla mnie troche nudniejsza tematyka niż inne rozdziały w nauce SQLa ;)
@nieinformatyk
@nieinformatyk Жыл бұрын
A mnie jara najbardziej optymalizacja :)
Rodzaje indeksów w bazie danych Oracle
19:58
nieinformatyk
Рет қаралды 3,3 М.
He sees meat everywhere 😄🥩
00:11
AngLova
Рет қаралды 11 МЛН
Wait for the last one! 👀
00:28
Josh Horton
Рет қаралды 149 МЛН
ОСКАР ИСПОРТИЛ ДЖОНИ ЖИЗНЬ 😢 @lenta_com
01:01
Dlaczego funkcje analityczne poprawiają wydajność zapytań SQL?
14:40
Projektowanie Indeksów w SQL Server
1:34:48
Cezary Walenciuk
Рет қаралды 5 М.
Jakie są relacje pomiędzy tabelami? Baza danych SQL cz. 2
19:12
Lubię Programować
Рет қаралды 1,4 М.
Poziomy izolacji sql - wyjaśnienie dla laika + przykłady
27:36
nieinformatyk
Рет қаралды 3,6 М.
Django или FastAPI - кто быстрее?
35:35
Senior Pomidor Developer
Рет қаралды 10 М.
Normalizacja Baz Danych Dla Początkujących + Praktyka
21:08
nieinformatyk
Рет қаралды 15 М.
What is a Database?
7:36
IBM Technology
Рет қаралды 72 М.
Самый дорогой кабель Apple
0:37
Romancev768
Рет қаралды 309 М.
Урна с айфонами!
0:30
По ту сторону Гугла
Рет қаралды 8 МЛН
تجربة أغرب توصيلة شحن ضد القطع تماما
0:56
صدام العزي
Рет қаралды 4,5 МЛН
Здесь упор в процессор
18:02
Рома, Просто Рома
Рет қаралды 145 М.