【学习计划】《MySQL实战45讲》10 | MySQL为什么有时候会选错索引?


一、新名词

1. 索引的“区分度”

  • 一个索引上不同的值越多,这个索引的区分度就越好。
  • 基数越大,索引的区分度越好。

2. “基数”(cardinality)

索引上不同的值的个数。


二、新指令

1. show index

show index from t;

可以查看一个索引的基数等信息。

2. analyze table

analyze table t;

可以用来重新统计索引信息。

3. force index

select * from t force index(a) where a between 10000 and 20000;

可以用来重新统计索引信息。


三、新参数

1. innodb_stats_persistent

存储索引统计的方式

  • 设置为on的时候,表示统计信息会持久化存储。这时,默认的N是20,M是10。
  • 设置为off的时候,表示统计信息只存储在内存中。这时,默认的N是8,M是16。

四、新知识点

  1. 索引扫描行数的判断:根据统计信息来估算记录数。统计信息就是索引的“区分度”。
  2. MySQL 得到索引基数的方法:采样统计。

五、小结

索引选择异常和处理

  1. 采用force index强行选择一个索引。
  2. 修改语句,引导MySQL使用我们期望的索引。
  3. 在有些场景下,可以新建一个更合适的索引,来提供给优化器做选择,或删掉误用的索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值