回答
不一定。这跟 SQL 查询的字段集是否全部命中索引有关。
如果全部命中了索引,则不需要回表查询,否则就需要通过非聚簇索引上的主键值再去主键索引树查询一次行记录。
在 SQL 查询中,一条能覆盖查询中所有字段的索引称为覆盖索引**。**
覆盖索引能减少树的搜索次数,显著提升查询性能,是 SQL 性能优化的常用手段。
扩展
下面用一个例子演示下。
一、初始化数据
定义一张用户表(t_user)
CREATE TABLE `t_user` (
`id` int NOT NULL,
`age` int NOT NULL,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `idx_age` (`age`)
) ENGINE=InnoDB;