mysql索引知识_mysql索引必会知识点

聚簇索引和非聚簇索引

主要区别在于组织索引的结构是否和数据存储的结构一样。一般再Innodb中主键索引就是聚簇索引,没有主键会默认生成隐藏主键字段。理论上也可以指定其他字段为聚簇索引,聚簇索引也不必唯一。

主键索引和普通索引

我们都知道,InnoDB引擎下的存储结构为b+树,也就是说首先根据key值一层一层的组织整个存储结构,然后在最后一层叶子节点存放真正的value值。那么我们用什么作为这个key值呢?主键索引就是将主键作为这个key值,非主键索引就是在建立索引时将其他值作为key。然后将主键作为value存储。非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。

那么使用主键索引有什么好处呢?最大的好处就是只需要一次就能定位到真实的数据值,而普通索引都需要进行回表查询。也就是先查询主键ID。然后通过主键ID查询真实的value值。

c13c1c8ed3b81aff3f98b4667a5ec6bf.png

最左前缀匹配原则

mysql建立索引的时候都是按照定义字段从左到右排序的。也就是说,如果存在索引(name,age)。最后建立的b+树的叶子节点肯定是从左到右先按照name属性分成n组。然后每组中再按照age属性排列的。所以当我们查询where name = XXX时,mysql就会使用上面的索引结构进行查询。而不是走全表扫描。但是如果是 where age = XXX 则不满足全局扫面。只能走全表扫描。

索引下推

索引下推是MySQL 5.6之后引入的。假如说我们存在索引(name,age)然后查询 where name like xxx and age = xxx and sex = xxx 在以前的话是先进行name索引查询,然后回表查询出name like xxx的结果。然后再筛选出age = xxx and sex = xxx的结果。也就是说符合name = xxx有多少条数据。我们就需要回表查询多少次。如果是5.6之后的版本。会将age = xxx这个条件在第一次匹配name like xxx 的时候就进行一次过滤。

6747358afd23fda0d25b240b90cfd6ea.png

9bb3a64dfee8344ac2241a043de2b0bb.png

联合索引、索引覆盖

上面我们就说过普通索引存在回表查询的操作,这里会大大影响效率。那么怎么避免这种情况呢。 我们可以在建立索引的时候就将要查询的数据列建立成索引,这样在查询的时候因为普通索引直接包含了所以要查询的数据,也就不需要回表查询了。也就是我们要查询的数据是索引key的子集。而这个索引key就是联合索引。也就是多个列共同建立的索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值