Indeksy B-Tree i ich zastosowanie
Co faktycznie przechowuje indeks i jakie operacje przyspiesza.
Indeksy B-Tree i ich zastosowanie to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.
Dlaczego osoby prowadzące rozmowy pytają o indeksy
Gdy osoba prowadząca rozmowę mówi: „to zapytanie działa wolno, co Pan/Pani zrobi?”, niemal zawsze oczekuje odpowiedzi obejmującej indeks. Indeksy są najważniejszym sposobem poprawy wydajności odczytu, dlatego odróżniają kandydatów, którzy zapamiętali składnię, od tych, którzy rozumieją, jak baza danych faktycznie znajduje wiersze.
W tej lekcji zbuduje Pan/Pani precyzyjny model mentalny indeksu B-Tree: dowie się, co przechowuje, jakie operacje przyspiesza i jak omawiać go jak starszy inżynier.
Problem rozwiązywany przez indeks
Bez indeksu znalezienie wierszy spełniających warunek wymusza odczytanie każdego wiersza w tabeli. Jest to skan sekwencyjny (lub pełny skan tabeli). W tabeli zawierającej milion wierszy oznacza to milion sprawdzeń, nawet jeśli pasuje tylko jeden wiersz.
Indeks to osobna, posortowana struktura danych, która pozwala silnikowi przejść bezpośrednio do pasujących wierszy, podobnie jak indeks w książce pozwala znaleźć temat bez czytania każdej strony.
-- No index: the engine reads ALL rows to find this one
SELECT * FROM users WHERE email = 'ada@example.com';Co właściwie przechowuje B-Tree
Domyślnym indeksem w PostgreSQL, MySQL, SQL Server i większości silników jest B-Tree (zrównoważone drzewo). Przechowuje wartości indeksowanej kolumny w posortowanej kolejności, zorganizowane w płytkie drzewo stron.
- Każdy liść przechowuje klucze indeksu oraz wskaźnik do właściwego wiersza tabeli.
- Drzewo pozostaje zrównoważone, więc każde wyszukiwanie dotyka tylko kilku stron, niezależnie od rozmiaru tabeli.
Wyszukiwanie przechodzi od korzenia do liścia w przybliżeniu w log(N) krokach, zamiast skanować wszystkie N wierszy.
Tworzenie pierwszego indeksu
Indeks B-Tree tworzy się za pomocą CREATE INDEX. Należy nadać mu jasną nazwę, aby osoba przeglądająca kod od razu znała tabelę i kolumny.
Po utworzeniu tego indeksu zapytanie filtrujące po email może wykorzystać go do znalezienia pasującego wiersza w kilku odczytach stron zamiast wykonywać pełny skan.
CREATE INDEX idx_users_email ON users (email);
-- Now this lookup uses the index instead of scanning
SELECT * FROM users WHERE email = 'ada@example.com';Operacje przyspieszane przez B-Tree
Ponieważ B-Tree przechowuje wartości w posortowanej kolejności, przyspiesza znacznie więcej niż tylko dokładne dopasowania. Osoby prowadzące rozmowy techniczne doceniają precyzyjne wyliczenie:
- Równość:
WHERE email = ? - Zakres:
WHERE age > 30,BETWEEN,<,>= - Dopasowanie prefiksu:
WHERE name LIKE 'Ada%'(ale NIE'%da') - ORDER BY dla indeksowanej kolumny, bez sortowania
- MIN/MAX, ponieważ znajdują się na krańcach posortowanej struktury
Przykład: zapytanie zakresowe
Rozważmy tabelę orders zawierającą miliony wierszy. Zapytanie raportowe wyszukuje najnowsze zamówienia. Dzięki indeksowi na created_at silnik przechodzi do początku zakresu w posortowanym indeksie i odczytuje kolejne wpisy tylko tak długo, jak jest to potrzebne.
Indeks zmienia pełny skan tabeli w ograniczony skan zakresu, odczytujący tylko pasujący fragment.
CREATE INDEX idx_orders_created_at ON orders (created_at);
SELECT order_id, total
FROM orders
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01';Indeksy pomagają również w sortowaniu
Ważny, często pomijany szczegół: ponieważ indeks jest już posortowany, silnik może zwrócić wiersze w kolejności indeksu i pominąć osobny etap sortowania. Ma to znaczenie dla ORDER BY, a szczególnie dla paginacji top-N.
Jeśli sortowanie odbywa się po kolumnie, dla której istnieje pasujący indeks, optymalizator może odczytywać indeks w odpowiedniej kolejności i zakończyć pracę, gdy zbierze wystarczającą liczbę wierszy.
-- Index on created_at lets this avoid a sort and stop after 10 rows
SELECT order_id, total
FROM orders
ORDER BY created_at DESC
LIMIT 10;Ukryty koszt: heap fetch
Zwykły indeks B-Tree przechowuje tylko indeksowaną kolumnę oraz wskaźnik do wiersza. Po znalezieniu pasujących wpisów silnik nadal musi przejść do tabeli (heap), aby odczytać pozostałe wybrane kolumny.
To dodatkowe odwołanie to heap fetch. Jest tanie dla kilku wierszy, ale kosztowne, gdy zapytanie pasuje do wielu wierszy, co jest jednym z powodów, dla których indeks o niskiej selektywności bywa pomijany. (Później zobaczy Pan/Pani, jak rozwiązują to indeksy pokrywające.)
Potwierdzanie użycia indeksu
Nigdy nie należy twierdzić, że indeks jest używany — trzeba to potwierdzić za pomocą EXPLAIN. Podczas rozmowy technicznej omówienie planu pokazuje rzeczywiste zrozumienie tematu.
Seq Scanoznacza, że indeks NIE został użyty.Index ScanlubIndex Seekoznacza, że został użyty.
Jeśli dodano indeks, ale nadal widoczny jest skan sekwencyjny, planista uznał skan za tańszy, często dlatego, że zapytanie pasuje do zbyt dużej części tabeli.
EXPLAIN
SELECT * FROM users WHERE email = 'ada@example.com';
-- Look for: Index Scan using idx_users_emailKlucze główne są już indeksowane
Częsta pułapka podczas rozmowy technicznej: zadeklarowanie ograniczenia PRIMARY KEY lub UNIQUE automatycznie tworzy pomocniczy indeks B-Tree. Nie należy dodawać drugiego indeksu na tej samej kolumnie.
Dlatego złączenia i wyszukiwanie po kluczach głównych są już szybkie, a pytanie „czy należy indeksować kolumnę id?” jest zwykle pułapką — zostało to już zrobione automatycznie.
-- This already builds a unique B-Tree index on (id)
CREATE TABLE users (
id BIGINT PRIMARY KEY,
email TEXT UNIQUE
);Jak to ująć podczas rozmowy technicznej
Warto podsumować to jednym zwięzłym zdaniem, które osoba prowadząca rozmowę od razu zrozumie:
„Indeks B-Tree to posortowana, zrównoważona struktura, która pozwala silnikowi znaleźć wiersze w log(N) odczytach stron zamiast skanować całą tabelę. Przyspiesza operacje równości, zakresów, prefiksów i ORDER BY dla indeksowanych kolumn, ale każde dopasowanie nadal wymaga heap fetch dla kolumn nieindeksowanych.”
Następnie należy poprzeć to wynikiem EXPLAIN. Połączenie modelu z dowodami to właśnie sposób na zdobycie punktów.
Szybki test
Sprawdź swój model mentalny operacji przyspieszanych przez indeks B-Tree.
Podsumowanie: indeksy B-Tree
Najważniejsze wnioski na następną lekcję:
- B-Tree przechowuje indeksowane wartości w posortowanym, zrównoważonym drzewie, zapewniając wyszukiwanie w czasie
log(N). - Przyspiesza operacje równości, zakresów, prefiksów (LIKE od lewej), ORDER BY i MIN/MAX.
- Każde dopasowanie nadal wymaga heap fetch dla kolumn, których nie ma w indeksie.
- Opakowanie kolumny w funkcję lub użycie wiodącego symbolu wieloznacznego wyłącza możliwość użycia indeksu.
- Zawsze należy weryfikować użycie indeksu za pomocą
EXPLAIN; ograniczenia PRIMARY KEY i UNIQUE automatycznie tworzą indeks.
Dalej: jak ustalać kolejność kolumn, gdy jeden indeks obejmuje kilka z nich.
Ucz się SQL dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Indeksy B-Tree i ich zastosowanie” jest bezpłatna?
Tak — pełny tekst „Indeksy B-Tree i ich zastosowanie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Interview Prep, przejdź na CoddyKit PRO. Kurs SQL Interview Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Indeksy B-Tree i ich zastosowanie”?
Co faktycznie przechowuje indeks i jakie operacje przyspiesza. Ćwiczysz SQL Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Interview Prep?
Nie wymagamy żadnego doświadczenia. SQL Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Indeksy B-Tree i ich zastosowanie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Interview Prep?
Tak. Każda lekcja SQL Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Indeksy B-Tree i ich zastosowanie
- Kolejność kolumn w indeksie złożonym
- Indeksy pokrywające i skanowanie wyłącznie indeksu
- Kiedy indeksy szkodzą: zapisy i selektywność