Mysql索引的一些杂乱总结

88 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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)的索引查询

索引下推

在没有使用索引下推的情况,查询过程是这样的:

  1. 存储引擎根据where条件中name索引字段,找到符合条件的3个主键ID
  2. 然后二次回表查询,根据这3个主键ID去主键索引上找到3个整行记录
  3. 把数据返回给MySQL Server层,再根据where中age条件,筛选出符合要求的一行记录
  4. 返回给客户端


作者:一灯架构
链接:juejin.cn/post/712987… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。