mysql 调优-利用索引覆盖和下推

回表

只查询一次索引得不到想要的数据,典型的场景就是非聚簇索引查询:先拿到主键ID,再根据id查询一次得到数据(再次查询这就是回表)

索引覆盖:根据普通索引查询不回表就能得到数据

-- 联合索引(age, addr)
select age, addr from t_user where age > 10;

-- 单列索引(不一定非要联合索引,因为每个二级都有id,只要不回表就行)
select id, age from t_user where age > 10;

索引下推:索引覆盖是不回表,索引下推是减少回表次数

-- 常规思路:先查询 age > 10,根据聚簇索引的结果集,再过滤 age < 60 的
-- 真实执行:先查询 age > 10,后面条件也是 age,不先找聚簇索引了,再把 a < 60 的也过滤了,再找聚簇索引
 select * from t_user where age > 10 and age < 60;

-- 联合索引(age,name)
-- 思路一样,先过滤 a > 10,因为是联合索引,先把 name like 了再找聚簇索引
select * from t_user where age > 10 and name like '张%';
posted @ 2023-05-17 15:47  CyrusHuang  阅读(73)  评论(0编辑  收藏  举报