Способы оптимизирования запросов
Один из любимых вопросов от работодателей на собеседовании.
Чтож давайте разберемся, что от вас желают услышать интервьюеры
1. Уменьшение объема данных
• Используйте SELECT только нужные столбцы, вроде база, но так и тянет многих обычно нажать на любимую всеми звездочку.
• Ограничьте выборку по строкам, используя фильтры и лимиты.
2. Оптимизация функций и выражений
• Как можно меньшее использование LIKE, SUBSTRING, и преобразования типов, особенно в WHERE-условиях.
• Эти операции очень тяжелые в обработке и могут замедлить запрос (особенно с большими данными).
3. Выбор правильных индексов
• Индексирование наиболее используемых полей (часто используемых в WHERE, JOIN, и ORDER BY).
• Индексы ускоряют доступ к данным, но важно понимать меру и не лепить их 50 штук.
4. Агрегации и подзапросы
• Для оптимизации избегайте агрегаций и подзапросов, когда это возможно.
• Вместо них старайтесь использовать JOIN и WITH (CTE) для промежуточных результатов, если они приводят к меньшему объему данных на выходе.
5.Оптимизация JOIN и порядка соединений
• Порядок JOIN-ов важен: сначала соединяйте таблицы с меньшим количеством строк, чтобы уменьшить объем промежуточных данных.
• По возможности, оптимизируйте порядок с учетом индексированных полей.
6. Анализ планов выполнения (EXPLAIN)
• Используйте EXPLAIN для понимания, как база данных выполняет запрос.
• Смотрите на узкие места, как последовательность сканирования таблиц, индексы, и перезаписывайте запрос при необходимости.
• Поддерживается в: PostgreSQL, MySQL, SQL Server, Oracle (храни его господь) и другие...
7. Кэширование результатов
• Если один и тот же запрос крутите 10 раз, рассмотрите кэширование результатов в материальном представлении (materialized view) или временной таблице, чтобы не рассчитывать их каждый раз заново.
8. Использование партицирования (Partitioning)
• Разделение больших таблиц на разделы (partitioning) по датам или регионам (или другому подходящему полю)
• Позволяет базе данных обращаться только к нужному разделу, ускоряя запросы.
9. Выбор правильного типа данных
• Использование INT вместо BIGINT или VARCHAR(100) вместо TEXT экономит место и снижает объем данных, с которыми работают запросы, ускоряя их выполнение.
Какие способы вы бы еще добавили сюда?
Один из любимых вопросов от работодателей на собеседовании.
Чтож давайте разберемся, что от вас желают услышать интервьюеры
1. Уменьшение объема данных
• Используйте SELECT только нужные столбцы, вроде база, но так и тянет многих обычно нажать на любимую всеми звездочку.
• Ограничьте выборку по строкам, используя фильтры и лимиты.
2. Оптимизация функций и выражений
• Как можно меньшее использование LIKE, SUBSTRING, и преобразования типов, особенно в WHERE-условиях.
• Эти операции очень тяжелые в обработке и могут замедлить запрос (особенно с большими данными).
3. Выбор правильных индексов
• Индексирование наиболее используемых полей (часто используемых в WHERE, JOIN, и ORDER BY).
• Индексы ускоряют доступ к данным, но важно понимать меру и не лепить их 50 штук.
4. Агрегации и подзапросы
• Для оптимизации избегайте агрегаций и подзапросов, когда это возможно.
• Вместо них старайтесь использовать JOIN и WITH (CTE) для промежуточных результатов, если они приводят к меньшему объему данных на выходе.
5.Оптимизация JOIN и порядка соединений
• Порядок JOIN-ов важен: сначала соединяйте таблицы с меньшим количеством строк, чтобы уменьшить объем промежуточных данных.
• По возможности, оптимизируйте порядок с учетом индексированных полей.
6. Анализ планов выполнения (EXPLAIN)
• Используйте EXPLAIN для понимания, как база данных выполняет запрос.
• Смотрите на узкие места, как последовательность сканирования таблиц, индексы, и перезаписывайте запрос при необходимости.
• Поддерживается в: PostgreSQL, MySQL, SQL Server, Oracle (храни его господь) и другие...
7. Кэширование результатов
• Если один и тот же запрос крутите 10 раз, рассмотрите кэширование результатов в материальном представлении (materialized view) или временной таблице, чтобы не рассчитывать их каждый раз заново.
8. Использование партицирования (Partitioning)
• Разделение больших таблиц на разделы (partitioning) по датам или регионам (или другому подходящему полю)
• Позволяет базе данных обращаться только к нужному разделу, ускоряя запросы.
9. Выбор правильного типа данных
• Использование INT вместо BIGINT или VARCHAR(100) вместо TEXT экономит место и снижает объем данных, с которыми работают запросы, ускоряя их выполнение.
Очень важный поинт:
Кириллица кодируется 2мя байтами, в отличии от латиницы, то есть varchar(10) может содержать 5 ру символов, либо 10 en символов
Какие способы вы бы еще добавили сюда?