Константы TSQL ... Использовать переменную или литерал? - PullRequest
4 голосов
/ 20 января 2009

Я просто читаю рекомендации по коду моей компании, и там говорится, что никогда не рассматривайте переменные как константу в SQL Server, используйте вместо этого литералы Причина в том, что sql-сервер не может построить хороший план выполнения, когда вы используете переменные в запросе.

Кто-нибудь знает, правда ли это? Мы используем MSSQL 2005, и этот документ может быть написан для 2000 года.

Ответы [ 3 ]

3 голосов
/ 20 января 2009

Это «обычно» верно для SQL Server 2005, поскольку теперь он пытается предварительно сгенерировать планы выполнения для максимально возможного количества запросов. Ваш пробег может варьироваться, поскольку он зависит от ваших данных и вашей SARG (проверьте планы запросов и посмотрите), но этот tecdoc (они использовали предварительную версию SQL Server 2005) гласит:

http://www.microsoft.com/technet/prodtechnol/sql/2005/qrystats.mspx

Избегайте использования локальных переменных в запросы

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

1 голос
/ 20 января 2009

SQL Server может построить лучший план выполнения, если он использует литерал. Один случай, который я видел, включал вид с разделением. Если вы выберете разделенное представление с переменной SQL, то оцените переменную во время выполнения, где, как если бы вы используете литеральный SQL, идет сразу после базовой таблицы.

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

1 голос
/ 20 января 2009

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

Ссылка: http://www.sqlmag.com/Article/ArticleID/42801/sql_server_42801.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...