1、索引的概念:
索引是一种数据结构,可以帮助我们快速的进行数据的查找.
2、索引的分类:
1.普通索引
2.唯一索引
3.主键索引
4.组合索引
5.全文索引
聚集索引和非聚集索引的区别:
3、数据结构:
索引的底层数据结构是B+树或者是hash表。对于不同类型的数据结构,是跟使用的存储引擎相关的。如果使用的是MyISAM与InnoDB,底层的数据结构为B+树,如果使用的是Memory,则对应的数据结构为hash表。
各种存储引擎对比1,各种存储引擎对比2
为什么使用B+树作为索引的数据结构之各种数据结构之间对比
各种数据结构之间对比
- 存储引擎:决定数据在磁盘上的不同组织形式。
存储引擎:
-
InnoDB
同一张表在磁盘上的存储形式:(数据和索引放在一起的,在.idb文件中)
-
MyISAM
同一张表在磁盘上的存储形式:(数据和索引是分开存储的)
回表问题:
1、回表和索引覆盖:
2、最左匹配:
上图中第三个SQL由于最左匹配原则,没有用到索引。
但是如果表中的字段全部都是索引时,无论进行什么样的查询都会用到索引。
3、索引下推:
-
MySQL架构图:
-
索引下推:
仍以id为主键,name,age为组合索引
1、在没有索引下推之前,SQL的执行过程如下:先根据name去存储引擎拿到全量数据,将数据读取到server层,然后再server层根据age做数据过滤。
2、有索引下推后:直接根据name和age两个列去存储引擎筛选数据,将最终的结果返回给客户端。