3 回答
TA贡献2012条经验 获得超12个赞
不,顺序无关紧要(或至少:不重要)。
任何体面的查询优化器都会查看该子句的所有部分,WHERE
并找出满足该查询的最有效方法。
我知道SQL Server查询优化器将选择合适的索引-无论您有两个条件都处于哪个顺序。我假设其他RDBMS也会有类似的策略。
重要的是您是否有合适的索引!
对于SQL Server,如果您具有以下条件,它将可能使用索引:
索引
(LastName, FirstName)
索引
(FirstName, LastName)
(LastName)
或或(FirstName)
(或两者)的索引
另一方面-对于SQL Server而言-如果您习惯于从表中SELECT *
获取所有列,并且表很小,则查询优化器很有可能只会进行表(或聚集索引)扫描而不是使用一个索引(因为查找整个数据页面以获取所有其他列的代价非常快)。
TA贡献1884条经验 获得超4个赞
WHERE子句的顺序不应在符合SQL标准的数据库中有所作为。在大多数数据库中,不能保证评估顺序。
不要以为SQL关心顺序。以下在SQL Server中生成错误:
select *
from INFORMATION_SCHEMA.TABLES
where ISNUMERIC(table_name) = 1 and CAST(table_name as int) <> 0
如果首先执行此子句的第一部分,则仅将数字表名强制转换为整数。但是,它失败了,提供了一个清楚的示例,表明SQL Server(与其他数据库一样)不关心WHERE语句中子句的顺序。
TA贡献1780条经验 获得超1个赞
ANSI SQL草稿2003 5WD-01-Framework-2003-09.pdf
6.3.3.3规则评估顺序
...
如果优先级不是由格式或括号确定的,则通常从左到右执行表达式的有效评估。但是,取决于表达式是否实际上是从左到右求值,这取决于实现,特别是在操作数或运算符可能导致条件升高或是否可以在不完全评估表达式所有部分的情况下确定表达式的结果时。
添加回答
举报