首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是选择性?

什么是选择性?
EN

Database Administration用户
提问于 2021-11-08 12:10:43
回答 1查看 3.4K关注 0票数 4

问题是我不明白--不,我确实理解选择性--但我一直在阅读对它的不同定义,这让我很困惑。

我认为(基于盖尔·肖的 ):选择性是谓词所具有的。列不是选择性的。索引是没有选择性的。操作人员没有选择性。选择性是对谓词影响的行百分比的度量。

混乱:

Server执行计划第三版,格兰特弗里奇。第223页。他说

对于给定的索引,谓词的选择性是匹配行的预期比率。计算表(z)中的行总数,计算给定列的不同值(x)数,或所有行之间的列组合数,然后(x/z)给出索引的选择性,用于将列(或列)与未知值进行比较的相等谓词。高选择性指数具有较低的选择性。例如,0.01 ( 1% )的选择性意味着优化器期望表中的行总数的1%与谓词匹配。相反,最糟糕的选择性是1.0 (或100%),这意味着每一行都将匹配谓词条件。

嗯?我认为高度选择性,即100%,即100%的价值是不同的,是一件好事。但他说,100%是最糟糕的选择。

然后在文章中,他们计算了两个不同值(性别)的柱的选择性为0.02%。但0.02%肯定不是好事。

EN

回答 1

Database Administration用户

发布于 2021-11-08 15:50:50

选择性是查询谓词的属性。通往定义选择性是这样的一种方法是:

选择性是指任何行满足谓词(即为真)的概率。

因此

对于在有1,000,000行的表上操作的谓词,选择性为0.01 (1%),这意味着谓词返回估计的10,000行(1%的1,000,000行),并丢弃估计的990,000行。

行匹配谓词的高概率意味着高的选择性值。

不幸的是,正如你所发现的那样,词语的选择是令人困惑的:

高选择性谓词(选择性为0.10或更低的谓词)是可取的。

“高度选择性”(“非常选择性”可能是一个更好的选择)谓词导致低选择性值(即与谓词匹配的给定行的低概率)。

看来许多人,包括你引用的资料来源的作者,都使用“选择性”一词来表达完全不同的意思。他们通常称它为“索引选择性”,并将其计算为索引键基数(不同键值的数目)与底层关系基数的比率。因此,键值越明显,“选择性”就越高(接近1),这当然是与该列组合的谓词选择性相反的。

这种混乱似乎是由服务器文档造成的,它指出(重点是我的):

密度是关于给定列或列组合中的重复数的信息,它计算为1/(不同值的数目)。查询优化器使用密度来增强从同一表或索引视图返回多列的查询的基数估计。随着密度的降低,一个值的选择性增加。

考虑到

频率是有关statistics对象的第一个键列中每个不同值的出现情况的信息,并计算为行计数*密度。在具有唯一值的列中,最大频率为1。

我们可以看到值频率=行计数/(不同值的数量),并意识到Microsoft的逆值调用“值选择性”。随后,不同值的数目越少,数值频率越高,值的选择性越低。这似乎是您的源正在谈论的(虽然令人困惑的第一个源提到谓词的选择性在同一句中)。

尽管如此,当你阅读关于“选择性”的文章时,你需要了解特定作者心中的选择性。

票数 8
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/302287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档