gpt4 book ai didi

sql - SQL 中 where 子句的顺序重要吗?

转载 作者:行者123 更新时间:2023-12-03 04:39:06 25 4
gpt4 key购买 nike

假设我有一个名为 PEOPLE 的表,其中包含三列:IDLastNameFirstName。这些列都没有索引。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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com