mysql引擎InnoDB索引中的cardinality关键字
2016-08-20 10:41
441 查看
执行show index时,有一列叫做cardinality,这一列至关重要,如图
那么它是干啥的呢
一般我们在mysql中添加索引的时候,首先要选择创建索引的列,但并不是所有查询的列都要创建索引,我们是有一个标准的,就是要选择高选择性的列。当然也会有相对的低选择性列。
低选择性列:比如性别,地区这种字段,取值的范围比较小,称为低选择性,如果在这种列上添加索引,是完全没有意义的。
高选择性列:相对于低选择性,如果某个列取值范围很广。几乎没有 重复性,那么就是高选择性列,在这种列上边建索引,那是最合适的。
所以这里就引出了cardinality,它表示索引中不重复记录数量的预估值,这是一个预估值,而不是准确值,因为它是采样来的,实际中,也不可能得到准确的值,只要cardinality/rows_intabe值接近1,那么这列就适合建索引,相反,如果值接近0,那就要考虑这个索引是不是还有存在的必要。所以我们在访问高选择性字段并从中去除少量数据的时候,此列必建索引。
当然,更新cardinality值消耗是非常大的,InnoDB一般选择在下边两种情况更新cardinality信息
1.表中数据1/16数据发生变化
2.stat_modified_counter>2000000000
第一种好理解,表中数据发生变化就更新。但如果频繁对某一行数据更新,则第一种就不适合了,这时就是第二种了,它会对频繁更新某一行数据这种情况作出处理。
InnoDB是通过对8个叶子节点的采样来生成cardinality值的,所以这里就有两个问题:
1.采样值是不准确的
2.两次采样值可能不一样
当执行analyze table,show table status,show index时InnoDB会重新计算cardinality。但是切记,如果表中数据过多,且表上有多个辅助索引的时候,以上命令是非常耗时的。
cardinality比较少遇到,但却是很重要,适当的利用它,会有意想不到的效率哦
那么它是干啥的呢
一般我们在mysql中添加索引的时候,首先要选择创建索引的列,但并不是所有查询的列都要创建索引,我们是有一个标准的,就是要选择高选择性的列。当然也会有相对的低选择性列。
低选择性列:比如性别,地区这种字段,取值的范围比较小,称为低选择性,如果在这种列上添加索引,是完全没有意义的。
高选择性列:相对于低选择性,如果某个列取值范围很广。几乎没有 重复性,那么就是高选择性列,在这种列上边建索引,那是最合适的。
所以这里就引出了cardinality,它表示索引中不重复记录数量的预估值,这是一个预估值,而不是准确值,因为它是采样来的,实际中,也不可能得到准确的值,只要cardinality/rows_intabe值接近1,那么这列就适合建索引,相反,如果值接近0,那就要考虑这个索引是不是还有存在的必要。所以我们在访问高选择性字段并从中去除少量数据的时候,此列必建索引。
当然,更新cardinality值消耗是非常大的,InnoDB一般选择在下边两种情况更新cardinality信息
1.表中数据1/16数据发生变化
2.stat_modified_counter>2000000000
第一种好理解,表中数据发生变化就更新。但如果频繁对某一行数据更新,则第一种就不适合了,这时就是第二种了,它会对频繁更新某一行数据这种情况作出处理。
InnoDB是通过对8个叶子节点的采样来生成cardinality值的,所以这里就有两个问题:
1.采样值是不准确的
2.两次采样值可能不一样
当执行analyze table,show table status,show index时InnoDB会重新计算cardinality。但是切记,如果表中数据过多,且表上有多个辅助索引的时候,以上命令是非常耗时的。
cardinality比较少遇到,但却是很重要,适当的利用它,会有意想不到的效率哦
相关文章推荐
- mysql 索引长度tips innodb和myisam引擎
- MySQL InnoDB引擎索引长度受限怎么办?
- Mysql innodb引擎和myisam引擎 使用索引区别
- mysql innodb存储引擎的聚集索引
- Mysql (InnoDB引擎)聚集索引和辅助索引
- mysql innodb 引擎 key - 和 Primary key的区别 以及 索引的用法总结
- MySQL InnoDB引擎B+树索引简单整理说明
- 聚集索引、非聚集索引、聚集索引组织表、堆组织表、Mysql/PostgreSQL对比、联合主键/自增长、InnoDB/MyISAM(引擎方面另开一篇)
- mysql 存储引擎 innodb 学习复习 之 索引
- MySql中InnoDB引擎索引
- MySQL的InnoDB引擎的索引知识小结
- MySQL技术内幕-InnoDB存储引擎读写笔记(索引概述)
- mysql中存储引擎为Innodb的索引介绍
- mysql的存储引擎innodb、myisam对插入影响和索引对插入的影响
- MySQL5.5索引数在InnoDB引擎内与索引数在mysql中定义的数量是不一致问题
- 做一个合格的程序猿之MYSQL存储引擎INNODB简介--初识索引(三)
- mysql 索引长度tips innodb和myisam引擎
- mysql InnoDB引擎支持hash索引吗
- Mysql innodb引擎和myisam引擎使用索引区别
- 关于MySQL中的InnoDB引擎的MVCC机制的理解