gpt4 book ai didi

sql - 相同的查询使用不同的索引?

转载 作者:行者123 更新时间:2023-12-02 13:09:09 24 4
gpt4 key购买 nike

如果更改 where 条件的值,选择查询可以使用不同的索引吗?

以下两个查询使用不同的索引,唯一的区别是索引的值条件和 typeenvoi='EXPORT' 或和 typeenvoi='MAIL'

select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail
from v_envoiautomate
where etat=0 and typeenvoi='EXPORT'
and nbessais<1


select numenvoi,adrdest,nomdest,etat,nbessais,numappel,description,typeperiode,datedebut,datefin,codeetat,codecontrat,typeenvoi,dateentree,dateemission,typedoc,numdiffusion,nature,commentaire,criselcomp,crisite,criservice,chrono,codelangueetat,piecejointe, sujetmail, textemail
from v_envoiautomate
where etat=0 and typeenvoi='MAIL'
and nbessais<1

谁能给我解释一下吗?

最佳答案

索引的详细信息作为统计存储在 SQL Server 的直方图类型数据集中。

每个索引都分为多个范围,每个范围都包含该范围内键值的摘要,例如:

  • 范围高值
  • 范围内的值数量
  • 范围内不同值的数量(基数)
  • 等于最高值的值的数量

...等等。

您可以通过以下方式查看给定索引的统计信息:

DBCC SHOW_STATISTICS(<tablename>, <indexname>)

每个索引都有一些特征,例如密度和最终的选择性,它们告诉查询优化器索引中的每个值可能有多唯一,以及如何唯一该索引的高效之处在于可以快速定位记录。

由于您的查询在 where 子句中包含三列,因此这些列中的任何一个都可能具有对优化器有用的索引。如果其他索引的选择性不够高,也可能会考虑主键索引。

最终,它归结为优化器快速判断需要多少页读取来读取每个非聚集索引+书签查找,并与其他值进行比较,而不是进行表扫描。

这些判断所依据的统计数据也可能有很大差异;默认情况下,SQL Server 仅对任何重要表行的一小部分进行采样,因此该索引的选择性可能无法代表整体。当索引中有高度不唯一的键时,这尤其成问题。

在这种特定情况下,我猜测您的 typeenvoi 索引非常不唯一。既然如此,收集的统计数据可能会向优化器表明其中一个值比另一个值更稀有,并且选择该索引的可能性会增加。

关于sql - 相同的查询使用不同的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1062459/

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