| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > SQL Server 2008r2, процедуры с динамическим SQL |
| Автор: lv151 5.12.2014, 08:53 | ||||||
| SQL Server 2008r2 Есть процедура, которая в зависимости от выбранных полей на клиенте, строит SELECT запрос, который представляет собой динамический SQL:
Вопрос. Я думаю, что для данной процедуры хранится не оптимальный план запроса. Т.е. если после выполнения
выполнится
Как будет строиться план для второго запроса? |
| Автор: Akina 5.12.2014, 10:43 |
Независимо от предыдущего запроса. |
| Автор: lv151 5.12.2014, 12:24 |
| Понял. |
| Автор: lv151 5.12.2014, 12:34 | ||
Добавлено @ 12:43
Согласен, как раз хочу сделать что-то подобное. Почему?Как я понимаю, для обычной ХП, после первого выполнения создаётся план.При последующих выполнениях, план берётся из кэша. ? |
| Автор: Akina 5.12.2014, 12:59 | ||
Ага... при условии, что текст процедуры не изменился ни на байт - вернее, если не было ALTER/DROP PROCEDURE. Если же текст процедуры динамически изменялся - план строится заново. Даже тогда, когда новый текст точно равен старому. Иначе с запросами - там, насколько я знаю, сравнивается именно текст. Что же до динамических запросов - то ЕМНИП они не кэшируются. |
| Автор: Дрон 7.12.2014, 23:54 | ||||
| Насколько я помню план для динамических запросов всё-таки кэшируется по их тексту. Причём от хранимой процедуры, в которой собирается этот запрос, он не зависит. Кстати, если собирать запрос вот так
То для каждого значения @arg будет отдельный план. А если вот так:
То план будет один для любого параметра (т.к. текст запроса не меняется). В этом есть и плюсы, и минусы. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/SQL-Server-2008r2-protsedury-s-dinamicheskim-SQL-id54814880ae201598148b4567#findElement_E7045_5484be85ae20153d7233d32c_0 |
| Автор: lv151 8.12.2014, 08:42 |
| Где можно почитать про все ньюансы динамическго SQL? |