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*

相关推荐
KG_LLM图谱增强大模型2 分钟前
scHilda:大模型与知识图谱分层融合,突破单细胞分型瓶颈
数据库·人工智能·知识图谱
凯瑟琳.奥古斯特4 分钟前
力扣3654:二维矩阵连续空位统计
数据结构·数据库·算法·职场和发展
再战300年14 分钟前
通过docker实现mysql一主多从
mysql·docker·容器
满昕欢喜24 分钟前
SQL Server的概述与安装
数据库·sqlserver
2501_9307077828 分钟前
使用C#代码在 Excel 中为数据透视表添加筛选器
数据库·数据挖掘·数据分析
Irene199135 分钟前
(课堂笔记)MySQL 基础(对比 Oracle 学习)
mysql·oracle
TDengine (老段)40 分钟前
TDengine 数据库创建与参数详解
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
IT策士1 小时前
Django 从 0 到 1 打造完整电商平台:电商项目需求分析与数据库设计
数据库·django·需求分析
阳光九叶草LXGZXJ1 小时前
达梦数据库-学习-52-DmDrs参数介绍(Manager模块)
linux·运维·数据库·sql·学习