Куратор раздела
Data Analysis IT
Оптимизация запросов
Один из любимых вопросов от работодателей на собеседовании. Разберём, что хотят услышать интервьюеры.
1. Уменьшение объема данных
- Используйте
SELECTтолько нужные столбцы, без*. - Ограничивайте выборку по строкам фильтрами и
LIMIT.
2. Оптимизация функций и выражений
- Минимизируйте
LIKE,SUBSTRING, преобразования типов вWHERE. - Эти операции тяжёлые и замедляют запросы на больших данных.
3. Выбор правильных индексов
- Индексируйте поля, часто используемые в
WHERE,JOIN,ORDER BY. - Индексы ускоряют доступ, но ставьте их умеренно.
4. Агрегации и подзапросы
- Избегайте агрегаций и подзапросов, если можно.
- Используйте
JOINиWITH(CTE) для промежуточных результатов, уменьшающих объём данных.
5. Оптимизация JOIN и порядка соединений
- Порядок важен: сначала соединяйте таблицы с меньшим количеством строк.
- Учитывайте индексированные поля при планировании порядка соединений.
6. Анализ планов выполнения (EXPLAIN)
- Прогоняйте
EXPLAIN, чтобы видеть план выполнения. - Ищите узкие места (full scan, неверные индексы) и переписывайте запрос.
- Работает в PostgreSQL, MySQL, SQL Server, Oracle и др.
7. Кэширование результатов
- Часто повторяемые запросы кэшируйте в материализованных представлениях или временных таблицах.
8. Использование партицирования
- Делите большие таблицы на разделы по дате, региону или ключу.
- Это позволяет читать только нужный раздел и ускоряет запросы.
9. Выбор правильного типа данных
- Используйте
INTвместоBIGINT,VARCHAR(100)вместоTEXT, когда это возможно. - Меньшие типы экономят место и ускоряют работу.
ℹ️
Кириллица кодируется двумя байтами, в отличие от латиницы. Например, VARCHAR(10) вмещает 5 русских или 10 латинских символов.