1、谈一下对MySQL索引的理解

1、索引的概念:

索引是一种数据结构,可以帮助我们快速的进行数据的查找.

2、索引的分类:

1.普通索引
2.唯一索引
3.主键索引
4.组合索引
5.全文索引
聚集索引和非聚集索引的区别

image.png

3、数据结构:

索引的底层数据结构是B+树或者是hash表。对于不同类型的数据结构,是跟使用的存储引擎相关的。如果使用的是MyISAMInnoDB,底层的数据结构为B+树,如果使用的是Memory,则对应的数据结构为hash表。
各种存储引擎对比1各种存储引擎对比2
为什么使用B+树作为索引的数据结构之各种数据结构之间对比
各种数据结构之间对比

  • 存储引擎:决定数据在磁盘上的不同组织形式。

存储引擎:

  • InnoDB

    同一张表在磁盘上的存储形式:(数据和索引放在一起的,在.idb文件中)
    图片.png
  • MyISAM

    同一张表在磁盘上的存储形式:(数据和索引是分开存储的)
    图片.png

回表问题:

如何避免回表查询,什么是覆盖索引

1、回表和索引覆盖:
回表和索引覆盖.png
2、最左匹配:
最左匹配.png

上图中第三个SQL由于最左匹配原则,没有用到索引。

但是如果表中的字段全部都是索引时,无论进行什么样的查询都会用到索引。
3、索引下推:
  • MySQL架构图:


    MySQL架构图.png
  • 索引下推:


    图片.png

仍以id为主键,name,age为组合索引
1、在没有索引下推之前,SQL的执行过程如下:先根据name去存储引擎拿到全量数据,将数据读取到server层,然后再server层根据age做数据过滤。
2、有索引下推后:直接根据name和age两个列去存储引擎筛选数据,将最终的结果返回给客户端。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容