自学内容网 自学内容网

【MySQL】知识总结——索引的类型分类和性质

常见的基于InnoDB+树索引方面(默认都是B+树)

  • 聚簇索引(主键索引):

                非叶子节点存储主键和页号

                叶子节点存储完整数据,双向链表结构,便于范围查询

                快速定位页,非记录

  • 非聚簇索引(非主键索引——辅助索引,二级索引):

                叶子节点仅存储索引列和主键,不包含完整数据

PS:使用select * 会引起回表(先通过二级索引查到ID,再去主键索引查询非索引列数据),由于ID不连续,主键索引造成大量随机I/O操作,频繁回表效率低。

索引性质方面

  • 普通索引(二级索引——由非主键列构建的索引,辅助索引)
  • 主键索引
  • 唯一索引
  • 全文索引
  • 空间索引

索引的最左前缀匹配原则

        MySQL在利用索引进行查询时,查询条件从最左边开始逐个字段匹配,直到遇到第一个不能匹配的字段为之。主要用于联合索引

1)联合索引等于查询字段——根据顺序定位索引中的相应位置,再检索记录。

2)查询字段中缺少联合索引的部分字段——也会利用索引进行查询,仅限于使用索引的前缀部分。

3)查询索引后缀字段——查询没有涉及到索引的左边部分,不能使用联合索引,可能会使用全表扫描,导致效率降低。

4)查询语句包含范围查询,列如>、<、between、like,停止使用联合索引来优化查询。

索引下推

        减少回表查询,提高查询效率的技术。将部分带有索引的条件交由存储引擎层进行过滤操作减少了I/O(本该由Server层操作,交由存储引擎层因此叫做“下推”)PS:索引下推是应用在联合索引上的。

没有使用索引下推

        1)通过索引找到主键ID数据。

        2)通过主键ID查询完整数据行,回表操作。

        3)数据交由Server层,将满足条件的数据过滤出得到最终数据行。

使用索引下推

        1)通过索引找到主键ID数据。

        2)联合索引内字段,直接在存储引擎进行索引过滤,得到最终主键ID。

        3)通过主键ID回表查询得到完整数据。

注意事项

        1)MySQL5.6版本以后支持,InnoDB和MySAM

        2)查询中引用子查询索引下推可能不会生效。

        3)使用了函数或表达式索引下推也不能生效。

        4)使用聚簇索引(主键)查询,也不会生效,因为是对于非簇聚索引来减少回表次数


原文地址:https://blog.csdn.net/2303_76696898/article/details/142407330

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!