我遇到了一个有趣的障碍(至少对我有趣).下面是我的查询的一般概念.假设@AuthorType是存储过程的输入,并且每个地方都有各种专门条件我已经发表评论.
SELECT *
FROM TBooks
WHERE
(--...SOME CONDITIONS)
OR
(@AuthorType = 1 AND --...DIFFERENT CONDITIONS)
OR
(@AuthorType = 2 AND --...STILL MORE CONDITIONS)
Run Code Online (Sandbox Code Playgroud)
对我来说有趣的是,如果我使用@AuthorType = 0执行此SP,它的运行速度比删除最后两组条件(为@AuthorType的特殊值添加条件的条件)要慢.
SQL Server不应该在运行时意识到永远不会满足这些条件并完全忽略它们吗?我所经历的差异并不小; 它大约是查询长度的两倍(1-2秒到3-5秒).
我希望SQL Server能够为我做太多优化吗?我是否真的需要为特殊条件设置3个独立的SP?