mysql 离散度_【MySQL】索引原理(四):创建索引的几点建议,列的离散度,前缀索引...

我们容易有以一个误区,就是在经常使用的查询条件上都建立索引,索引越多越好,那到底是不是这样呢?

因为索引对于改善查询性能的作用是巨大的,所以我们的目标是尽量使用索引。但这并不意味着索引越多越好,因为索引会占用内存,还需要维护,并且索引还会影响增删改速度。

所以我们创建索引时有什么能参考的属性,或者要遵守的原则呢?

1.列的离散度

我们先来看一个重要的属性列的离散度,公式如下:

count(distinct(column_name)) : count(*) -- 列的全部不同值个数:所有数据行行数

数据行数相同的情况下,分子越大,列的离散度就越高。简单来说,如果列的重复值越多,离散度就越低,重复值越少,离散度就越高。我们来思考一个问题:在下图所示的表中,name上面建立索引和在gender上面建立索引有什么区别?

cc37078a66af456dea4032362dd8c1c4.png

当我们用在gender上建立的索引去检索数据的时候,由于重复值太多,需要扫描的行数就更多。例如,我们现在在gender列上面创建一个索引,然后看一下执行计划。

ALTER TABLE user_innodb ADD INDEX idx_user_gender(gender); -- 创建索引(耗时比较久)

EXPLAIN SELECT * FROM `us

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值