|
Модераторы: Akina |
|
lv151 |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
SQL Server 2008r2
Есть процедура, которая в зависимости от выбранных полей на клиенте, строит SELECT запрос, который представляет собой динамический SQL:
Вопрос. Я думаю, что для данной процедуры хранится не оптимальный план запроса. Т.е. если после выполнения
выполнится
Как будет строиться план для второго запроса? Это сообщение отредактировал(а) lv151 - 5.12.2014, 09:04 |
||||||
|
|||||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Независимо от предыдущего запроса. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
lv151 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Понял.
Это сообщение отредактировал(а) lv151 - 5.12.2014, 12:30 |
|||
|
||||
Akina |
|
||||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Нет. Это абсолютно.
Вообще это неправильный подход. Процедура должна принимать один параметр, в ней должны быть прописаны все варианты запросов, и выбираться должен тот, который нужен. Типа:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
lv151 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Добавлено @ 12:43
Согласен, как раз хочу сделать что-то подобное. Почему?Как я понимаю, для обычной ХП, после первого выполнения создаётся план.При последующих выполнениях, план берётся из кэша. ? Это сообщение отредактировал(а) lv151 - 5.12.2014, 12:45 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Ага... при условии, что текст процедуры не изменился ни на байт - вернее, если не было ALTER/DROP PROCEDURE. Если же текст процедуры динамически изменялся - план строится заново. Даже тогда, когда новый текст точно равен старому. Иначе с запросами - там, насколько я знаю, сравнивается именно текст. Что же до динамических запросов - то ЕМНИП они не кэшируются. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Дрон |
|
||||
Java-ненавистник :) Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 92 |
Насколько я помню план для динамических запросов всё-таки кэшируется по их тексту. Причём от хранимой процедуры, в которой собирается этот запрос, он не зависит.
Кстати, если собирать запрос вот так
То для каждого значения @arg будет отдельный план. А если вот так:
То план будет один для любого параметра (т.к. текст запроса не меняется). В этом есть и плюсы, и минусы. Этот ответ добавлен с нового Винграда - http://vingrad.com |
||||
|
|||||
lv151 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Где можно почитать про все ньюансы динамическго SQL?
|
|||
|
||||
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |