mysql系列04---索引及性能分析

1、索引的结构

 mysql索引的数据结构,对经典的B+Tree进行了优化,在原B+Tree上增加了一个指向相邻叶子结点的链表指针,就形成了一个带有顺序指针的B+Tree,提高了区间访问的性能。

 选择B+Tree的优点:

a、相对于二叉树,层级更少,搜索效率更高

b、相对于B-Tree,B+Tree只在叶子节点上存储数据,而B-Tree在非叶子节点上也存了数据,这样存储的键减少,层级更高。

c、hash索引不支持排序和范围操作。

2、索引的分类

 聚集索引:又叫主键索引,叶子节点保存这一行的数据

非聚集索引:又叫常规索引、二级索引,叶子节点保存这一行的主键

 

3、性能分析工具---explain

a、使用方式:在select语句前加上explain

b、执行计划各字段的含义:

 id: 表的执行顺序,值相同执行顺序从上到下,值越大越先执行。

select_type:表示select的类型,simple表示单表查询;primary表示主查询也就是最外层的查询;union表示join的表;SUBQUERY子查询

type: 连接类型,性能由好到差的连接类型:NULL、system、const、eq_ref、ref、range、index、all

         NULL不访问任何表

         system访问系统表

        const使用主键索引

        eq_ref唯一索引

   ref非唯一索引

   range

        index虽然用了索引,但全遍历所有的索引

   all全表扫描

possible_keys:可能用到的索引

key:实际用到的索引

key_len:索引字段的长度

rows:扫描的行数,只是一个估值,并不太准确

filtered:返回的行数占总行数的百分比,值越大越好

extra:额外的信息

4、使用规则

 最左前缀法则:主要是针对联合索引的顺序

索引失效的原因:

a、在索引字段上计算;

b、字符串不加单引号;

c、头部模糊匹配;

d、or条件前如有索引,后面条件没有索引,则前面索引失效;

e、mysql评估扫描全表比使用索引快,则不会走索引

5、设计原则

posted @ 2024-04-25 16:20  爱生活,爱代码  阅读(25)  评论(0编辑  收藏  举报