SQLLab
Глоссарий/Составной индекс
ИндексыПродвинутый

Составной индекс

Индекс по нескольким колонкам. Порядок колонок критически важен.

Синтаксис
CREATE INDEX ON table (col1, col2, col3);

Объяснение

Составной индекс по (a, b, c) работает для условий: WHERE a=..., WHERE a=... AND b=..., WHERE a=... AND b=... AND c=... Но НЕ работает для WHERE b=... без a. Правило левого префикса: запрос должен включать первые N колонок индекса по порядку. Порядок: сначала колонки равенства (=), потом диапазона (<, >). INDEX(status, created_at) быстрее для WHERE status='paid' AND created_at > '2024-01-01'.

Пример

-- Эффективный составной индекс
CREATE INDEX ON orders (user_id, status, created_at DESC);

-- Использует индекс:
SELECT * FROM orders WHERE user_id = 1 AND status = 'paid' ORDER BY created_at DESC;

-- НЕ использует (нет первой колонки):
SELECT * FROM orders WHERE status = 'paid';