数据库面试时,常问的 Selectivity 和 Cardinality 到底是什么

点击蓝色“有关SQL”关注我哟

加个“星标”,天天与10000人一起快乐成长

数据库面试时,常问的 Selectivity 和 Cardinality 到底是什么_第1张图片

让我们举个例子:

假设新学期报道,当你置身于班级中时,你发现大家都穿着同样颜色的衣服,无非男女款式不同,男同学长裤,女同学长裙,但都是黑色。人生地不熟的你,怎么才能确定你们的女班长在哪一堆中间(假设班长是女的,且你还不知道她长什么模样)?

当然,说句废话,只要你就读的中学不是女子中学,或者男子中学,你们班级肯定有男有女。按照性别来归类,总共只有 2 类。这两类就可以被称作 Cardinality = 2.

有人会问,知道 Cardinality = 2, 能找到班长吗?答案自然没那么简单,放在后面讲。这里先铺个垫,让大家对 Cardinality 有个形象的认识。

再来细分下同学的穿着。从服装上已经无法再细分了,大家都是黑色,长裤长裙一半一半。

但从球鞋上,还是能看出花样来。男同学,普遍的阿迪,耐克,特别一些的会穿美金龙,阿瑟士。而女同学们,则花样多了,阿迪,新百伦,斯凯奇,老爹鞋,热风,马丁靴,森马,甚至还有百丽,Coach, Miss Sixty等等。

一圈走下来,细心的你,发现一个统计数据,男同学穿4种鞋,女同学有16种品牌的鞋。按照刚才的算法, Cardinality 就等于 20.

经统计,全班总共有 50 人, 2 种性别的人,穿了 20 种品牌的鞋。

接下来,就是你挑班长的方法了:

按照男女比1:1来,你至少要从 25 个女同学里找到你的班长;

按照品牌的鞋来找,你会发现,只要从 50/20 个人里面找,就可以了。

自然,哪种方法快,就不用言说了。按照穿的鞋来找,最多只要找3个人,一问便知。

这里的依据,便是 50/20, 50/2 , 即 总人数/总分类个数,而 Cardinality 在这里就承担总分类个数的角色,也就是同一类属性中,不同属性值的个数。

将这个公式倒过来,总分类个数/总人数,就是这类属性的 Selectivity. 值越高,表示越多样化,也就越容易找到想要的人;值越低,表示缺乏多样性,精确查找的效率就越低。

可见, Selectivity 可以帮助我们有效评估字段建立索引的价值。

--完--

往期精彩:

本号精华合集(二)

如何写好 5000 行的 SQL 代码

如何提高阅读 SQL 源代码的快感

我在面试数据库工程师候选人时,常问的一些题

零基础 SQL 数据库小白,从入门到精通的学习路线与书单

你可能感兴趣的:(数据库,ai,统计学,nagios,jdbc)