为SQL Server排序WHERE子句

Nei*_*ell 2 sql-server performance

查询优化是否可以使SQL Server的WHERE子句的顺序不同?

例如,查询计划是这样的:

select * from table where col1 = @var1 and col2 = @var2
Run Code Online (Sandbox Code Playgroud)

与此不同?:

select * from table where col2 = @var2 and col1 = @var1
Run Code Online (Sandbox Code Playgroud)

当然这是一个人为的例子,我尝试过更复杂的例子.查询计划对于两者都是相同的,但我总是想知道是否值得订购WHERE子句,以便最具体的条款首先出现,以防优化器以某种方式"修剪"结果并最终可能更快.

这实际上只是一个思想实验,我不打算解决具体的性能问题.

其他RDBMS也呢?

Tom*_*tel 5

每个现代RDBMS都有一个查询优化器,除其他外,它负责重新排序条件.一些优化器使用非常复杂的统计数据来做到这一点,并且它们经常超越人类的直觉,关于什么是好的排序,什么不是.所以我的猜测是:如果你可以肯定地说"这个排序比另一个好",那么优化器也可以,并且它会自己解决.

结论:不要担心这样的事情.这很少值得花时间.