SQL中的覆盖索引
覆盖索引是指一个索引包含了查询所需要的所有字段,因此查询可以直接通过索引返回结果,而无需回表到数据表中获取数据。
详细解释:
在数据库中,索引通常存储的是键值以及指向数据行的指针(如行ID)。当使用普通索引进行查询时,如果查询的字段不在索引中,数据库需要根据索引中的指针去数据表中查找对应的行,这个过程称为“回表”。
而覆盖索引是指,索引中包含了查询语句中所有需要返回的字段,这样查询只需要扫描索引而不需要回表,从而大大提高了查询效率。
例如,有一张表users,包含id(主键),name,age,address等字段。如果在name上建立了索引,那么执行查询:
SELECT name FROM users WHERE name = '张三';
因为name字段已经在索引中,所以可以直接从索引中返回结果,不需要回表。
如果索引包含的字段不够,比如查询需要返回age,而索引只有name,那么就需要回表去获取age字段。
查看9道真题和解析