Этот вопрос проверяет знание практических приёмов ускорения выполнения запросов.
Для ускорения запросов создавали индексы по часто используемым полям, в том числе составные. Сокращали число JOIN, преобразуя сложные запросы в несколько простых или денормализуя данные. Исключали проверку на NULL в WHERE, чтобы избежать полного сканирования («IS NULL» плохо индексируется), и использовали предикаты вида column = value.
Индексы:
B-tree-индексы для точного поиска и диапазонов.
Составные индексы по полям, которые вместе участвуют в фильтрах.
Индексы-частичные (WHERE status = 'active') для часто встречающихся статусов.
Уменьшение JOIN:
Денормализация: хранение часто запрашиваемых полей в одной таблице.
Разбиение одного сложного JOIN-запроса на два более простых с промежуточной записью в temp-table.
Проверка NULL:
Избегали IS NULL в условиях, вместо этого использовали column = '' или column IS NOT DISTINCT FROM value.
Для обязательных столбцов ставили NOT NULL, чтобы упростить плэннеру выбор индекса.
EXPLAIN / ANALYZE:
Всегда анализировали планы выполнения, выявляя узкие места.
Кэширование на уровне запросов:
Materialized views для предрасчитанных результатов.