На какую метрику следует ориентироваться для проверки эффективности оптимизации медленного SQL-запроса?

«На какую метрику следует ориентироваться для проверки эффективности оптимизации медленного SQL-запроса?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

После оптимизации необходимо оценивать комплекс метрик, а не одну. Ключевые из них:

  1. Время выполнения (Execution Time / Duration) — прямой показатель улучшения. Сравните ДО и ПОСЛЕ.
  2. Потребляемые ресурсы:
    • Логические чтения (Logical Reads) — количество страниц, прочитанных из кэша данных. Сильное снижение указывает на более эффективное использование индексов и меньшее обращение к данным.
    • Физические чтения (Physical Reads) — чтения с диска. Их уменьшение снижает нагрузку на I/O.
  3. План выполнения (Execution Plan):
    • Убедитесь, что исчезли дорогостоящие операции: Table Scans, Key Lookups, Sorts в памяти.
    • Появились эффективные операции: Index Seek, Merge Join.
    • Снизилась оценочная стоимость (Estimated Subtree Cost).

Практический пример анализа (псевдокод):

-- До оптимизации
-- Время: 1500 мс, Logical Reads: 10,000
SELECT * FROM Orders WHERE Status = 'Pending' ORDER BY CreatedDate;

-- После добавления индекса (Status, CreatedDate)
-- Время: 25 мс, Logical Reads: 150
SELECT * FROM Orders WHERE Status = 'Pending' ORDER BY CreatedDate;

Вывод: Успешная оптимизация подтверждается существенным снижением времени выполнения и количества логических чтений, а также более оптимальным планом запроса.