Проверяет знание методов ускорения аналитических запросов на больших данных.
Оптимизация тяжёлых запросов:
Добавляйте индексы (BRIN для временных рядов).
Используйте секционирование таблиц.
Настройте материализованные представления.
Применяйте параллельное выполнение запросов.
Стратегии оптимизации:
Индексы:
BRIN (Block Range Index) — для временных рядов (например, created_at).
GIN — для полнотекстового поиска.
CREATE INDEX sales_created_at_brin ON sales USING BRIN (created_at);Секционирование:
Разделение таблицы на части по ключу (например, по дате):
CREATE TABLE sales_2024 PARTITION OF sales
FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');Материализованные представления:
Предварительно рассчитанные данные для сложных агрегаций:
CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day, SUM(amount)
FROM sales
GROUP BY day;
-- Обновление по расписанию
REFRESH MATERIALIZED VIEW daily_revenue;Параллельные запросы:
Включите в настройках PostgreSQL:
SET max_parallel_workers_per_gather = 4; -- Использовать 4 ядраВажно:
Анализируйте планы запросов через EXPLAIN ANALYZE.
Для LIKE используйте индексы с опцией pg_trgm:
CREATE INDEX idx_name_trgm ON table USING GIN (column gin_trgm_ops);Вывод:
Комбинация индексов, секционирования и материализованных представлений даёт максимальный эффект.