前言
上次学习了几种常见的索引,以及建立索引的原则,但是在建立索引原则那段中提到了一个"高选择性",什么是高选择性上文已经给出了例子,但是如何判断是否为高选择性呢,这篇文章就介绍一下如何判定高选择性。
高选择性的判断
在mysql的innodb存储引擎中,可以使用show index from table_name;来查看索引的详情。
如图:
解释一下各个字段的含义:
①、table:表名
②、Non_unique:是否唯一,0唯一,1 不唯一
③、Key_name: 索引名称
④、Seq_in_index:
⑤、Column_name:索引列名
⑥、Collection: A 顺序排序
⑦、Cardinility: 不重复记录数量的预估值
⑩、Index_type: 索引类型
其中Cardnility就是高选择性判断的重要参考数据,Cardnility的值除以总数据量,如果越趋近于1,表名该表索引所在列重复数据越少,索引的使用价值越高,反之,如果一个字段只有两个值,比如性别,那么Cardnility的值可能只有2,2除以总数据量,趋近于0,那么该列使用索引的价值就不高,索引的选择性越低。
同时需要注意,Cardnility只是一个预估值,不能准确的统计,Cardnitity采用的是抽样数据统计,引起Cardinility变化的主要因素一是insert和update,另一个就是如果数据量大,那么采样时可能只抽取了部分叶子节点,那么再次show index from table_name也会引起Cardinility值的变化,但是这个变化不是因为数据增删引起的,仅仅是因为随机采用两次没有在同一个B+树的叶子节点上取值而导致的。
两个重要的数据库应用类型概念
1、OLTP OLTP一般就是普通应用连接使用的,我一般使用都是这种数据库。这种应用类型的典型特点就是查询数据量少,可能一次最多只有几十条。比如通过账户号查询账单信息,这种就是典型的OLTP查询类型。
2、OLAP OLAP我理解就是供大数据分析数据趋势使用的,一般不会使用索引,比如供大数据分析的账单,他们一般不会使用索引来查询。但是这种可能要涉及多个表关联统计。那么这种不使用索引来大规模统计的一般就属于OLAP应用。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第12天,点击查看活动详情