为什么语句对T-SQL的顺序很重要?

jay*_*agi 5 sql t-sql sql-server optimization ssms

打开如下所示的查询时为什么:

WHERE (statement1) AND ((statement2) OR (statement3))

SSMS查询设计器将其重构为以下语法:

WHERE (statement1) AND (statement2) OR (statement1) AND (statement3)

我假设它与SQL服务器如何解析查询,运行之前和ors之间有关?

是否有最终优化的最佳语句顺序的一般规则?

运行我自己的测试后,第二个查询会在处理时间内缩短0.5毫秒.它很小,我知道,但随着查询的复杂性会增加(仍然几乎没有差别),我对SQL服务器的工作方式有一般的兴趣.

Rem*_*anu 7

它与实际的SQL执行无关.与你所知道的大多数语言不同,T-SQL 没有布尔运算符短路1,像'运行之前'之类的概念没有意义,评估的顺序完全由查询优化器决策驱动,可能最终完全不同从你写的东西,或你期望的.

您看到的表达式重写似乎完全是SSMS查询设计内部解析器的工件.

1或者更好地说,无法通过编写表达式来强制确定布尔短路.实际运行时运算符短路确实发生,你只是不知道它是否以及何时会发生.