我想用存储过程编写一个查询并使用多个过滤器,但我想避免动态SQL。Sql Server查询优化
说我的参数可以为空(@ filter1,@ filter2,@ filter3 ...)。我可能会解决这个问题的一种方法是:
SELECT col1, col2, col3
FROM table
WHERE col1 = ISNULL(@filter1, col1)
AND col2 = ISNULL(@filter2, col2)
AND col3 = ISNULL(@filter3, col3)
如果不是null,则会通过适当的过滤器进行过滤。问题是: 1)这是一种很好的做法吗? 2)优化器会优化col1 = col1 out还是会影响查询性能?
性能会很糟糕,因为有很多可能的组合,查询计划不可能被缓存。动态SQL是一个更好的选择。 – 2010-06-23 20:09:49