0Pricing
Coding Interview Prep · Lekcja

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 Coding 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 Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding 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 — tak
  • A, 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 BY bez 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 Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding 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 Coding 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ąć Coding Interview Prep?

Nie wymagamy żadnego doświadczenia. Coding 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 Coding Interview Prep?

Tak. Każda lekcja Coding 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

  1. Indeksy B-Tree i ich zastosowanie
  2. Kolejność kolumn w indeksie złożonym
  3. Indeksy pokrywające i skanowanie wyłącznie indeksu
  4. Kiedy indeksy szkodzą: zapisy i selektywność
← Powrót do Coding Interview Prep