mysql性能调优(四)——聚簇索引、索引覆盖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/babyyaoyao/article/details/83106986

1、聚簇索引

     这里说的,聚簇索引是相对InnoDB数据库引擎来说的,讲的是聚簇索引随机主键值的效率

     对于InnoDB来说,主键尽量用整型,并且是递增的比较好,因为新增的时候,如果是随机主键插入,会存在节点分裂的现象。InnoDB节点下挂载的是数据行,内容比较大(myISAM不同,其节点下存储的是物理行地址,内容比较小)。你可以想象一下,你搬家,东西多和少的区别。。。

2、索引覆盖

     这里说的,索引覆盖是相对myISAM引擎来说的,其数据结构是B-tree,其节点下存储的数据所在的物理行地址:B-树是有2种节点的,一种是索引节点,另外一种是叶子节点,叶子节点是用来存储数据的,索引节点则是用来告诉用户存储在叶子节点中的数据顺序并帮助用户找到对应的数据

B-tree和B+tree的区别就是,B-树可以在非叶子节点命中,所以呢,如果一条sql语句在查询的数据刚好在索引中,而且查询的列刚好是索引中的一部分,那么就不需要再回行查询数据了。效率比较快

补充:

如果你要想查看一下 表的索引或者想看看索引的应用,可以用如下命令:

desc table_name (查看表的描述)

set names utf8;

reset query cache;

set profiling=on;

show profiles;

在show profiles的结果展示中 Extra : Using index 这样的描述,那么恭喜,用上了索引,效率相当高

索引使用的时候注意:

     建立索引之后,索引的查询条件得保持顺序、类型一致(左前缀)
    用explain select * from 'user' where phone=1005 用explain可以查看有没有选择索引查询
    由于phone是String类型的,所以在使用索引的时候,需要改成phone='1005'才能正确用索引
    用主键ID查询,主动用主键索引
    在索引列上,进行条件查询,一定要保证索引列是独立的,独立的意思是:索引列不能使用函数,也不能是表达式的一部分 

猜你喜欢

转载自blog.csdn.net/babyyaoyao/article/details/83106986