MySQL索引覆盖(Index Covering)是指一个查询可以通过使用索引中的信息来获取所需的数据,而不需要回表查询(即不需要访问数据表的主键或非索引列)。换句话说,查询的所有列都在索引中,因此MySQL可以直接从索引中获取结果,而不需要访问实际的数据行。
当查询的列不在索引中时,MySQL需要回表查询,即访问实际的数据行,这会导致额外的磁盘I/O操作,降低查询性能。
假设有一个表users
,结构如下:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
email VARCHAR(100)
);
如果经常查询用户的姓名和年龄,可以创建一个复合索引:
CREATE INDEX idx_name_age ON users(name, age);
查询示例:
SELECT name, age FROM users WHERE name = 'John';
在这个查询中,name
和age
都在索引idx_name_age
中,因此MySQL可以直接从索引中获取结果,而不需要回表查询。
希望这些信息对你有所帮助!如果有更多问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云