参考答案
非聚簇索引(二级索引)的叶子节点不存储完整行数据,仅存储索引列的值和对应的主键(或行指针)。当查询语句所请求的列不能完全由非聚簇索引覆盖时,数据库必须利用叶子中的主键,再去聚簇索引(主键索引,叶子含整行数据)中查找完整记录,此过程称回表。原因:非聚簇索引与数据行物理分离,避免数据冗余;但因此带来额外随机IO,降低查询性能。优化手段是使用覆盖索引(索引包含查询所有字段)避免回表,或利用索引下推减少回表次数。例如SELECT * FROM t WHERE name='a',name索引需回表;若SELECT id,name FROM t WHERE name='a'且索引为(name,id)则可覆盖。