SQL Server:多个Where子句

4
假设我有一个包含多个WHERE条件的T-SQL命令,类似于这样:
SELECT * 
FROM TableName
WHERE Column1 NOT LIKE '%exclude%'
  AND Column2 > 10

查询语句是否在不满足 Column1 条件时立即排除一行,或继续测试下一个 Column2 条件?我想知道是否更有效地交换条件以先测试 Column2 > 10 是否成立,然后再运行耗时较长的条件。注:如果有影响,Column1 的类型为 bigintColumn2 的类型为 ntext

我还会将表中可能存在的任何索引添加到问题中。 - Scott Selby
2
SQL是一种声明性语言,而不是过程性语言。查询优化器不考虑where子句的顺序。你的答案可能在这里:https://dev59.com/V2865IYBdhLWcg3wA5uc - Ramie
1
在 SQL Server 的未来版本中,ntexttextimage 数据类型将被移除。请避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)varchar(max)varbinary(max)详见此处 - marc_s
2个回答

2

Sql会根据可用的索引和统计信息设定查询计划。Sql本身并没有"短路"表达式求值,因为它是一种过程性语言,但最终查询计划将执行短路求值。

交换表达式不应影响性能。


0
正如Marc所说,在where子句中交换列不会对性能产生任何影响。相反,您可以考虑将数据类型NTEXT更改为nvarchar(X),其中X表示某些有意义的数据长度。

很遗憾,对于我的特定用途来说,这不会起作用,因为我只有对数据库的只读访问权限。 - Bijan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接