Почему мой SQL-запрос читает больше страниц, но быстрее?
Я тестировал некоторые некластеризованные индексы для добавления в таблицу внутри представления (которая имеет 7 внутренних объединений). После запуска Tunning Advisor (SQL Server 2008) он показал мне скрипт для создания незапланированного индекса в таблице (a), который мог бы помочь мне оптимизировать запрос.
Перед созданием индекса я выполнил запрос и получил статистику ввода-вывода и времени:
a) **Scan count 2, logical reads 420**
b) Scan count 2, logical reads 6
c) **Scan count 2, logical reads 40**
d) Scan count 3, logical reads 12
e) Scan count 4, logical reads 28
f) Scan count 4, logical reads 16
g) Scan count 2, logical reads 4
h) Scan count 1, logical reads 3
CPU time = 172 ms, elapsed time = 397 ms.
После создания некластеризованного индекса я получил это:
a) **Scan count 16, logical reads 710**
b) Scan count 2, logical reads 6
c) **Scan count 2, logical reads 8**
d) Scan count 3, logical reads 12
e) Scan count 4, logical reads 28
f) Scan count 4, logical reads 16
g) Scan count 2, logical reads 4
h) Scan count 1, logical reads 3
CPU time = 187 ms, elapsed time = 335 ms.
Проверьте строки A и C, у меня есть еще почти 300 страниц, читаемых в A, и только на 32 меньше в B. Так почему же этот запрос быстрее? Я всегда думал, что чем больше страниц читает запрос, тем хуже он выполняет
1 ответ
Короткий ответ будет: "потому что эти 2 запроса используют разные планы выполнения". Почему именно больше операций чтения привело к более быстрому выполнению в вашем случае - на это невозможно ответить, не имея обоих планов выполнения (и я не имею в виду скриншоты из SSMS, конечно), независимо от того, как сильно мы все будем полировать наши хрустальные шары.
Если вам нравятся подобные вещи, вы должны сначала прочитать много документации о том, как читать планы выполнения, добавив после этого пару книг, написанных такими людьми, как Кален Делани, Ицик Бен-Ган и другие такого уровня. это часто идет на крайние меры в объяснении тонкостей самого низкого уровня того и другого.
Или вы можете попытаться приложить планы в текстовом виде к вашему вопросу и надеяться, что 1) кто-то сможет указать фактическую причину наблюдаемого поведения, и 2) вы сможете понять объяснение.