0
点赞
收藏
分享

微信扫一扫

【高并发高性能高可用之海量数据MySQL实战-16】-MySQL索引创建原则

孟祥忠诗歌 2022-04-06 阅读 113

1、哪些情况需要创建索引

1. 频繁出现在where 条件字段,order排序,group by分组字段

2. select 频繁查询的列,考虑是否需要创建联合索引(覆盖索引,不回表)

3. 多表join关联查询,on字段两边的字段都要创建索引 

2、索引优化建议

1. 表记录很少不需创建索引 (索引是要有存储的开销).

2. 一个表的索引个数不能过多。

(1) 空间:浪费空间。每个索引都是一个索引树,占据大量的磁盘空间。

(2) 时间:

更新(插入/Delete/Update)变慢。需要更新所有的索引树。  太多的索引也会增加优化器的选择时间。

所以索引虽然能够提高查询效率,索引并不是越多越好,应该只为需要的列创建索引。

3. 频繁更新的字段不建议作为索引。

频繁更新的字段引发频繁的页分裂和页合并,性能消耗比较高。

4. 区分度低的字段,不建议建索引。

比如性别,男,女;比如状态。区分度太低时,会导致扫描行数过多,再加上回表查询的消耗。  如果使用索引,比全表扫描的性能还要差。这些字段一般会用在组合索引中。

姓名,手机号就非常适合建索引。

5. 在InnoDB存储引擎中,主键索引建议使用自增的长整型,避免使用很长的字段。

主键索引树一个页节点是16K,主键字段越长,一个页可存储的数据量就会越少,比较臃肿,查 询时尤其是区间查询时磁盘IO次数会增多。辅助索引树上叶子节点存储的数据是主键值,主键值越 长,一个页可存储的数据量就会越少,查询时磁盘IO次数会增多,查询效率会降低。

6. 不建议用无序的值作为索引。例如身份证、UUID

更新数据时会发生频繁的页分裂,页内数据不紧凑,浪费磁盘空间。

7. 尽量创建组合索引,而不是单列索引。优点:

(1)1个组合索引等同于多个索引效果,节省空间。

(2)可以使用覆盖索引

创建原则:组合索引应该把把频繁的列,区分度高的值放在前面。频繁使用代表索引的利用率高,  区分度高代表筛选粒度大,可以尽量缩小筛选范围。

举报

相关推荐

0 条评论