覆盖查询

743 阅读1分钟

覆盖查询是说你想要查询的内容就在索引上, 所以可以从索引上获取结果直接返回.

非覆盖的查询需要先通过索引找到主键, 然后通过主键找到对应的文档(行), 然后返回指定的文档。

以SQL数据库为列:

表的定义

create table users (
    ID primary key auto increment;
    Name varchar(100)
    Age int
)
alter table users create index on Name
select ID,  Name from users where Name = "张三";

因为Name已经创建了索引,所以当查询到 Name="张三"的时候,可以直接返回对应的ID

但是如果是下面的这条SQL, 就需要增加一次磁盘访问了.

select ID, Name, Age from users where Name = "张三";

因为当通过Name查询的时候,Age的信息并不在Name的索引上,所以需要根据ID再次从磁盘上找到对应的行,然后从这一行取出感兴趣的Age字段的值.