Kolejność kolumn w indeksie złożonym
Reguła lewego prefiksu i wybór właściwej kolejności kolumn dla danego obciążenia.
Kolejność kolumn w indeksie złożonym to bezpłatna lekcja SQL Interview Prep na CoddyKit. To lekcja 2 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.
Pytanie o indeks złożony
Gdy potrafi już Pan/Pani wyjaśnić działanie indeksu jednokolumnowego, osoby prowadzące rozmowy podnoszą poprzeczkę: „Wykonuje Pan/Pani zapytania po customer_id i order_date jednocześnie. Jak należy to zindeksować?” Oczekiwana odpowiedź to indeks złożony (wielokolumnowy) oraz uzasadnienie kolejności kolumn.
Ta lekcja wyjaśnia zasadę lewego prefiksu — jedną koncepcję, która tłumaczy niemal każde pytanie o indeksy złożone.
Czym jest indeks złożony
Indeks złożony indeksuje kilka kolumn jako uporządkowaną krotkę. Wpisy są najpierw sortowane według pierwszej kolumny, następnie według drugiej w obrębie równych wartości i tak dalej — dokładnie tak jak książka telefoniczna sortowana najpierw według nazwiska, a potem imienia.
Kolejność ma ogromne znaczenie, ponieważ priorytet sortowania wynika z kolejności zadeklarowanych kolumn.
CREATE INDEX idx_orders_cust_date
ON orders (customer_id, order_date);Zasada lewego prefiksu
Podstawowa zasada jest następująca: indeks złożony na (A, B, C) może być używany przez zapytania filtrujące po lewym prefiksie tych kolumn:
- Samo
A— tak A, B— takA, B, C— tak- Samo
B— NIE B, C— NIE
Warto pomyśleć o książce telefonicznej: można znaleźć wszystkie osoby o nazwisku „Smith”, ale nie można efektywnie znaleźć wszystkich osób o imieniu „John”, niezależnie od nazwiska, ponieważ książka nie jest posortowana w ten sposób.
Przykład: dopasowanie do prefiksu
Przy indeksie na (customer_id, order_date) te zapytania mogą z niego korzystać, ponieważ zaczynają się od customer_id:
Pierwsze używa wyłącznie kolumny wiodącej. Drugie wykorzystuje obie kolumny: najpierw zawęża wyniki po customer_id, a następnie wyszukuje w posortowanych według daty wpisach tego klienta.
-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;
-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';Przykład: brak dopasowania do prefiksu
To zapytanie filtruje wyłącznie po drugiej kolumnie, więc indeks na (customer_id, order_date) zasadniczo nie może sterować wyszukiwaniem — wpisy nie są globalnie posortowane według order_date.
Jeśli filtrowanie wyłącznie po order_date jest częstym wzorcem, potrzebny jest osobny indeks, którego kolumną wiodącą będzie order_date.
-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';
-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);Równość przed zakresem
Doprecyzowanie na poziomie starszego inżyniera: kolumny używane z warunkiem równości (=) należy umieszczać przed kolumnami używanymi z warunkiem zakresu (<, >, BETWEEN). Gdy indeks dojdzie do kolumny zakresowej, nie może już używać kolejnych kolumn do zawężania wyszukiwania.
Dla zapytania takiego jak status = 'paid' AND created_at > ? właściwa kolejność to (status, created_at), a nie odwrotna.
-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
ON orders (status, created_at);Wybór kolumny wiodącej
Jak wybrać kolumnę umieszczaną jako pierwszą? Osoby prowadzące rozmowy oczekują odpowiedzi opartej na rzeczywistym sposobie użycia:
- Na pierwszym miejscu powinna znaleźć się kolumna występująca w największej liczbie zapytań, szczególnie jako filtr równości.
- Warto preferować kolumnę o wysokiej selektywności (z wieloma różnymi wartościami), aby pierwszy krok wyeliminował jak najwięcej wierszy.
- Należy uwzględnić wymagania ORDER BY: dopasowanie kolejności indeksu może wyeliminować sortowanie.
Kolumna wiodąca to ta, która wykonuje najwięcej pracy związanej z filtrowaniem w rzeczywistym zestawie zapytań.
Indeks złożony pomaga w sortowaniu
Indeks złożony obsługuje również ORDER BY dla lewego prefiksu. Ponieważ wpisy są posortowane najpierw według customer_id, a następnie według order_date, zapytanie o zamówienia jednego klienta posortowane według daty praktycznie nie wymaga dodatkowego sortowania.
-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;Nie twórz nadmiarowych indeksów
Kandydaci często tworzą zbyt wiele indeksów. Jeśli istnieje już (customer_id, order_date), osobny indeks na (customer_id) jest zwykle nadmiarowy — indeks złożony już obsługuje zapytania po kolumnie wiodącej.
Każdy dodatkowy indeks zajmuje miejsce i spowalnia operacje zapisu, dlatego celem jest najmniejszy zestaw indeksów obejmujący używane wzorce zapytań, a nie jeden indeks na każdą kolumnę.
Potwierdzanie za pomocą EXPLAIN
Jak zawsze należy potwierdzić wybór planisty. Po utworzeniu indeksu złożonego trzeba uruchomić EXPLAIN i sprawdzić, czy pojawia się on jako Index Scan oraz ile wierszy szacuje planista.
Jeśli zapytanie niezgodne z prefiksem przechodzi na skan sekwencyjny, jest to dowód, że kolejność kolumn nie pasuje do sposobu użycia, i właśnie tak należy wyjaśnić to osobie prowadzącej rozmowę.
EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';Jak to ująć podczas rozmowy technicznej
Zwięzłe podsumowanie:
„Indeks złożony jest sortowany według kolumn od lewej do prawej, więc może obsługiwać każdy lewy prefiks tych kolumn, ale nie podzbiór obejmujący wyłącznie końcowe kolumny. Na pierwszym miejscu umieszczam najczęściej filtrowaną kolumnę o wysokiej selektywności, predykaty równości ustawiam przed predykatami zakresowymi i w miarę możliwości dopasowuję ORDER BY, a następnie weryfikuję wszystko za pomocą EXPLAIN.”
Szybki test
Zastosuj regułę najdłuższego lewego prefiksu.
Podsumowanie: kolejność kolumn w indeksie złożonym
Najważniejsze informacje:
- Indeks złożony jest sortowany od lewej do prawej; obsługuje tylko lewy prefiks swoich kolumn.
- Na początku umieszczaj kolumnę, która jest najczęściej używana w zapytaniach i ma wysoką selektywność.
- Umieszczaj kolumny z warunkami równości przed kolumnami z warunkami zakresu.
- Pasujący prefiks może również spełnić
ORDER BYbez dodatkowego sortowania. - Unikaj nadmiarowych indeksów jednokolumnowych, które są już pokryte przez indeks złożony, i weryfikuj wszystko za pomocą
EXPLAIN.
Następnie: indeksy pokrywające, które całkowicie eliminują pobieranie z heapu.
Często zadawane pytania
Czy lekcja „Kolejność kolumn w indeksie złożonym” jest bezpłatna?
Tak — pełny tekst „Kolejność kolumn w indeksie złożonym” 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 „Kolejność kolumn w indeksie złożonym”?
Reguła lewego prefiksu i wybór właściwej kolejności kolumn dla danego obciążenia. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Kolejność kolumn w indeksie złożonym”?
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ść