MySQL之覆盖索引

什么是覆盖索引?

覆盖索引:查询时使用了索引,且需要返回的列,在改索引中已经全部能找到。

示例:有user表如下:

sql 复制代码
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '技术主键',
  `name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`),
  KEY `idx_1` (`name`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

sql1:select * from user where id=1; -- 覆盖索引

sql2:select id,name from user where name='小明'; -- 覆盖索引

sql3:select id,name,age from user where name='小明'; -- 非覆盖索引,需要回表查询

小结:覆盖索引是指查询使用了索引,返回的列必须在索引中能全部找到

使用id查询,直接走聚集索引查询,一次索引扫描,直接返回数据,性能高

如果返回的列中没有创建索引,就可能会触发回表查询,所以尽量避免使用select*

相关推荐
程序员小八77713 小时前
MySQL 事务:一文把 ACID、隔离级别、MVCC、锁全串起来
数据库·mysql
lzhdim13 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
ltl14 小时前
ClickHouse Distributed 引擎与分布式查询路由
数据库
Wang's Blog14 小时前
PostgreSQL笔记60: 权限与角色管理——从层级体系到最佳实践
数据库·笔记·postgresql
whcyhhh14 小时前
头歌实践教学平台:大数据存储2023(六)
大数据·数据库·python
Elastic 中国社区官方博客16 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai
Faith_xzc16 小时前
一条 SQL 顶一条 Flink 链路?Doris Streaming Job 持续导入全景解析
大数据·数据库·sql·flink
阮胜昌17 小时前
MySQL 中的动态数据脱敏:无需更改应用程序即可保护敏感数据
android·mysql·adb
小白说大模型18 小时前
AI驱动的个性化学习路径:知识图谱与知识点关联的存储与推理
大数据·人工智能·学习·mysql·机器学习·prompt·知识图谱
这个DBA有点耶19 小时前
多模数据库深度解读:从“多库拼装”到“一库多能”的架构演进
数据库·mysql·dba