Głębiej
Indeksy to dodatkowe struktury danych (często **B-tree**), które pozwalają znaleźć wiersze bez skanowania całej tabeli. Pomagają przy:
- filtrach `WHERE`,
- lookupach w `JOIN`,
- czasem `ORDER BY` / `GROUP BY`,
- wymuszaniu unikalności (unique index).
Główny trade-off
Każdy zapis musi aktualizować wszystkie pasujące indeksy, więc:
- zapisy są wolniejsze,
- rośnie storage,
- rośnie koszt utrzymania (statystyki/vacuum/reindex zależnie od DB).
Wskazówki praktyczne
- Indeksuj kolumny o dobrej selektywności (dużo różnych wartości).
- W indeksach złożonych kolejność kolumn ma znaczenie (left-prefix rule): indeks `(a, b)` pomaga dla filtrów po `a` (i `a`+`b`), ale nie tylko po `b`.
- Unikaj indeksów redundantnych (koszt zapisów bez zysku).
Typowe pułapki
- Indeks na boolean/kolumnę o niskiej kardynalności i oczekiwanie dużych zysków.
- Za dużo indeksów na tabeli z intensywnymi zapisami.
- Brak weryfikacji `EXPLAIN`, czy planner faktycznie używa indeksu.