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

点击蓝色“有关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 数据库小白,从入门到精通的学习路线与书单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dbLenis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值