2010-10-04 2 views
2

У нас есть своеобразная ситуация с конкретным запросом.Зачем нужно обновлять представление, чтобы ускорить работу?

Этот запрос присоединяется к представлению, которое создает PIVOT для некоторых данных.

Теперь мы находим, что этот запрос выполняется очень медленно (10 секунд). У меня нет ручки о том, как последовательно воспроизводить его, работая медленно.

Однако, когда он работает медленно, мы можем отбросить и воссоздать представление, связанное с запросом, и это снова запустит запрос (< 1 секунда). Теперь этот UPDATE VIEW не изменяет фактическую схему представления каким-либо образом.

Я смущен. Какие-нибудь идеи относительно того, что здесь может происходить?

Что происходит при воссоздании представления, которое могло бы ускорить запрос?

+0

Как только он работает медленно, он работает медленно даже для значений, которые он мог бы получить раньше? –

+0

Да. Нет никаких изменений в запросе или значениях. –

ответ

3

Это звучит так: parameter sniffing.

На отдыхе это новый объект и новый план. Несмотря на то, что представление расширено, текст запроса относится к виду, и это не то же изображение, что и раньше

+0

Статуя gbn была размещена на моей святыне! –

+0

Хранимая процедура выполняется в двух разных сценариях. Один из них - для возврата всех данных в несколько таблиц, другой - для возврата одной строки с соответствующими данными. При воссоздании представления или просто хранимой процедуры, сценарий, который он запускает, сначала определяет, какой сценарий выполняется быстрее. –

0

Я видел этот вопрос раньше, и это странно. Что происходит, когда вы воссоздаете представление, SQL Server воссоздает план выполнения запроса, используемый представлением. Со временем запросы в вашем представлении, вероятно, объединяются в таблицы с плохими индексами, поэтому статистика SQL по индексам фактически начинает ухудшать производительность, а не помогать ей. Поэтому, как только вы воссоздаете представление, SQL Server теперь идентифицирует лучший план выполнения запросов для представления с заданной статистикой, и именно поэтому вы снова видите, что представление работает быстрее. Затем снова, как только статистика таблицы начинает увеличиваться, представление начинает снижаться в производительности, поскольку SQL Server не знает, как лучше всего выполнить план выполнения запроса для представления. Я бы предложил вам просмотреть таблицы в вашем представлении и исследовать соединения и индексы для используемых таблиц. Если вы выполняете содержимое представления в другом окне запроса, вы сможете сравнить оценочный план выполнения запроса для запроса, который запускается в представлении, и план оценки предполагаемого запроса, используемый представлением. С этим вы можете определить проблемный запрос.

+1

-1 для «плана выполнения для представления». В представлениях нет планов выполнения. –

Смежные вопросы