INDEX (индекс)
Структура данных, ускоряющая поиск строк по значению колонки.
CREATE INDEX [CONCURRENTLY] idx_name ON table (column); CREATE INDEX ON table (col1, col2); -- составной
Объяснение
Пример
-- Простой индекс CREATE INDEX ON users (email); -- Составной (порядок важен!) CREATE INDEX ON orders (user_id, created_at DESC); -- Частичный — только активные CREATE INDEX ON users (email) WHERE is_active = true;
Связанные термины
Анекдоты по теме
Разработчик: добавь индекс на email в таблице users (50M строк). DBA: CREATE INDEX CONCURRENTLY ON users (email); Разработчик: почему CONCURRENTLY? DBA: обычный CREATE INDEX берёт ACCESS SHARE LOCK — блокирует запись на всё время. CONCURRENTLY создаёт индекс в фоне без блокировки таблицы. Разработчик: а downside? DBA: дольше и не в транзакции.
JSONB в PostgreSQL говорит разработчику: — Хочешь гибкость документной базы? Я есть. — Хочешь индексы по полям внутри JSON? Я могу. — Хочешь JOIN с другими таблицами? Без проблем. — Ты... лучшее из двух миров? — Не рассказывай MongoDB.
— Что такое CLUSTER в PostgreSQL? — Физическая перезапись таблицы по порядку индекса. CLUSTER orders USING orders_created_at_idx; — После этого строки физически упорядочены по created_at. — Зачем? — Range queries по дате работают быстрее — меньше random I/O. — Минус? — Не поддерживается автоматически. Новые строки вставляются в случайном порядке.