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*

相关推荐
埃伊蟹黄面1 小时前
数据库基础认识
数据库
看我干嘛!1 小时前
Redis安装
数据库·redis·缓存
2401_824697661 小时前
如何管理Oracle服务器的内核共享内存_shmmax与shmall计算
jvm·数据库·python
2301_783848651 小时前
mysql数据迁移过程如何降低性能影响_采用增量备份与多线程同步
jvm·数据库·python
【心态好不摆烂】1 小时前
MySQL——表的约束(上)
数据库·mysql
小娄~~1 小时前
IO模型与并发服务器
运维·服务器·数据库
2401_884454151 小时前
CSS如何快速实现网站换肤功能_利用CSS变量重置全局颜色方案
jvm·数据库·python
fengxin_rou1 小时前
数据库三大范式深度详解:数据表设计规范化实战指南
数据库·mysql·范式
2301_809244531 小时前
PHP函数是否支持调用FPGA设备_PHP与FPGA硬件交互的实现方式【教程】
jvm·数据库·python
li星野1 小时前
Function Call 完全指南:让大模型从“聊天”到“行动”
数据库·oracle