mysql回表和索引覆盖理解

444 阅读1分钟

理解mysql中的回表,首先要明确回表存在于innodb引擎中,MyISAM的索引实现方式就是非聚集索引,先要了解“聚集索引”和“非聚簇索引”

innodb中的主键索引也称为“聚簇索引”,存储整体行信息(InnoDB的数据文件本身就是索引文件),所以SQL语句:select  id,name  from T where id =3 (表T的id字段为主键)时,会直接在“主键索引”中查找到ID=3即可返回数据,

如果是sql语句:select  id,name,sex  from T where name = “name1”(T表有id主键,和name的普通索引name_index),先在普通索引name_index中查找到 name1,取到id值(普通索引只存储索引字段和主键ID值),在回到主键索引中获取sex信息,这算一次“回表”操作。

理解覆盖索引:如果sql语句为:select id,name  from T where name = “name1”其中不包含sex信息,而在name_index中已经包含name、id信息,所以可以直接返回,不需用再次回表到主键索引中查找,这个理解为覆盖索引。