假设我有一个名为 PEOPLE 的表,其中包含三列:ID、LastName 和 FirstName。这些列都没有索引。 LastName 更独特,FirstName 不太独特。
如果我进行两次搜索:
select * from PEOPLE where FirstName="F" and LastName="L"
select * from PEOPLE where LastName="L" and FirstName="F"
我相信第二个更快,因为更独特的标准 (LastName
) 在 where
子句中排在第一位,并且记录将被更有效地删除。我认为优化器不够聪明,无法优化第一个 SQL 查询。
我的理解正确吗?
最佳答案
不,这个顺序并不重要(或者至少:不应该重要)。
任何像样的查询优化器都会查看WHERE
子句的所有部分,并找出满足该查询的最有效方法。
我知道 SQL Server 查询优化器会选择一个合适的索引 - 无论两个条件的顺序如何。我假设其他 RDBMS 也会有类似的策略。
重要的是你是否有合适的索引!
对于 SQL Server,如果您满足以下条件,它可能会使用索引:
(姓氏、名字)的索引
(名字,姓氏)的索引
- 仅针对
(LastName)
或仅针对(FirstName)
(或两者)的索引
另一方面 - 同样对于 SQL Server - 如果您使用 SELECT *
从表中获取所有列,并且该表相当小,那么有一个查询优化器很有可能只进行表(或聚集索引)扫描,而不是使用索引(因为查找完整数据页以获取所有其他列很快就会变得过于昂贵)。
关于sql - SQL 中 where 子句的顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436469/