Вопрос проверяет знание альтернативных методов оптимизации запросов к низкоселективным колонкам в больших таблицах, таких как шардирование и секционирование.
Низкоселективная колонка содержит небольшое количество уникальных значений относительно общего числа строк (например, поле 'статус' с 3 значениями на миллион записей). Обычный B-tree индекс в таком случае неэффективен, так как возвращает слишком много строк, и база данных часто предпочитает полное сканирование таблицы.
CREATE TABLE orders (id INT, status TEXT, amount DECIMAL) PARTITION BY LIST (status);
CREATE TABLE orders_active PARTITION OF orders FOR VALUES IN ('active');
CREATE TABLE orders_completed PARTITION OF orders FOR VALUES IN ('completed');
-- Запрос к 'active' затронет только одну партицию
SELECT * FROM orders WHERE status = 'active';Выбор подхода зависит от сценария: секционирование подходит для управления большими таблицами в одной БД, шардирование — для горизонтального масштабирования, битовые индексы — для аналитики, а материализованные представления — для частых агрегатных запросов. Комбинирование методов даёт максимальный эффект.