假设我有一个包含多个WHERE
条件的T-SQL命令,如下所示:
SELECT *
FROM TableName
WHERE Column1 NOT LIKE '%exclude%'
AND Column2 > 10
如果Column1
未得到满足,查询是否会排除一行,还是会继续测试Column2
的下一个条件?
我在问,因为我想看看在我运行更耗时的条件之前交换我的条件是否更有效率来首先测试Column2 > 10
。
修改:如果重要,Column1
类型为bigint
,Column2
类型为ntext
答案 0 :(得分:2)
Sql将根据可用的索引和统计信息设计查询计划。 Sql本身并不一定具有“短路”表达式评估,因为它是一种过程语言,但最终查询计划将执行短路评估。
交换表达式不应影响性能。
答案 1 :(得分:0)
正如Marc所说,在where子句中交换列不会对性能产生任何影响。相反,您可以寻找将数据类型NTEXT更改为nvarchar(X),其中x表示一些有意义的数据长度。