携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情
memory使用哈希索引
innodb支持自适应hash
myisam
存储引擎
表示不同数据在磁盘的不同组织形式
frm表结构
ibd innodn 数据+索引
MYD data myisam
MY1 索引
=====
数据和索引是否放在一起
聚簇索引
非聚簇索引
innodb 至少有一个聚簇索引 向innnodb的插入的时候,必须要包含一个索引的key值,这个索引的key值可以是主键,如果没有主键就是唯一键值,没有唯一键值就是自生成的6字节的rowid(用户不可见)。
回表,当根据普通索引查询到聚簇索引的key值之后,再根据聚簇索引的的key获取数据。
索引覆盖,根据普通索引直接查询到数据,不需要从聚簇索引查询任何数据。
最左匹配原则 如果你创建一个联合索引, 那 这个索引的任何前缀都会用于查询, (col1, col2, col3)这个联合索引的所有前缀 就是(col1), (col1, col2), (col1, col2, col3), 包含这些列的查询都会启用索 引查询.
2.其他所有不在最左前缀里的列都不会启用索引, 即使包含了联合索引里的部分列 也不行. 即上述中的(col2), (col3), (col2, col3) 都不会启用索引去查询.
注意, (col1, col3)会启用(col1)的索引查询
索引下推
在没有使用索引下推的情况,查询过程是这样的:
- 存储引擎根据where条件中name索引字段,找到符合条件的3个主键ID
- 然后二次回表查询,根据这3个主键ID去主键索引上找到3个整行记录
- 把数据返回给MySQL Server层,再根据where中age条件,筛选出符合要求的一行记录
- 返回给客户端
作者:一灯架构
链接:juejin.cn/post/712987…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。