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

共 1122字,需浏览 3分钟

 ·

2020-09-30 04:09

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

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


让我们举个例子:

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

当然,说句废话,只要你就读的中学不是女子中学,或者男子中学,你们班级肯定有男有女。按照性别来归类,总共只有 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 数据库小白,从入门到精通的学习路线与书单










浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报