Основные принципы выборки
- Избегай
SELECT * — получай только нужные тебе колонки, чтобы снизить объём передаваемых данных и потребление памяти
- Фильтруй данные как можно раньше с помощью условий WHERE, чтобы минимизировать количество обрабатываемых строк
Стратегия индексирования
- Создавай индексы на колонках, которые часто используются в фильтрах и джойнах
- Избегай переизбытка индексов, так как слишком много индексов замедляют операции записи (
INSERT, UPDATE, DELETE)
Структура запроса
- Используй CTE (Common Table Expressions) или временные таблицы, чтобы разбить сложные запросы на читаемые и управляемые части
- Предпочитай
UNION ALL вместо UNION, когда удаление дубликатов не требуется — это позволяет избежать лишнего этапа сортировки
- Выбирай подходящий тип джойна (
INNER JOIN, LEFT JOIN и т. д.) в зависимости от связи между данными
Операции над наборами vs. построчные операции
- Избегай курсоров по возможности — они обрабатывают строки одну за другой и работают значительно медленнее
- Всегда предпочитай операции над наборами — именно под них SQL-движки оптимизированы
Анализ производительности
- Регулярно смотри планы выполнения запросов, чтобы выявить узкие места: полное сканирование таблиц, отсутствующие индексы и т. д.
- Следи за производительностью запросов со временем, особенно по мере роста объёмов данных
Главный вывод
Оптимизация производительности SQL — это сокращение лишней работы: меньше данных, ранняя фильтрация, грамотное использование индексов и работа с наборами, а не с отдельными строками.