新闻详情

新闻详情

首页 / 资讯中心 / 详情

数据库中的索引

发布时间:2026/9/27 22:15:44来源:尧图网络
数据库中的索引
一、索引到底解决什么问题先看没有索引时数据库怎么查数据。假设有一张users表存了 100 万条用户记录。执行SELECT * FROM users WHERE username zhangsan;数据库只能从第 1 行开始逐行扫描直到找到username zhangsan的那一行。这叫全表扫描需要扫描 100 万次。如果username上建了索引数据库就像查字典一样先通过拼音/部首找到字在哪一页直接翻到那一页。索引的本质用额外的存储空间换取查询速度。二、索引的数据结构B 树MySQLInnoDB的索引默认用B 树结构。理解 B 树就理解了索引为什么快。1. B 树长什么样特点所有数据都存在叶子节点非叶子节点只存“导航信息”叶子节点之间用链表连接方便范围查询树的高度通常只有3-4 层即使存上亿条数据2. 为什么 B 树快假设有 100 万条数据B 树高度为 3第 1 层根1 次磁盘 IO 第 2 层中间1 次磁盘 IO 第 3 层叶子1 次磁盘 IO 总共3 次磁盘 IO 就能找到目标相比全表扫描的 100 万次 IO快了 30 万倍。三、聚簇索引 vs 非聚簇索引1. 聚簇索引Clustered Index数据和索引存在一起索引的叶子节点就是完整的数据行。InnoDB 中主键就是聚簇索引。也就是说表数据本身就是按主键顺序组织的一张表只能有一个聚簇索引-- id 是主键它就是聚簇索引 CREATE TABLE users ( id INT PRIMARY KEY, -- 聚簇索引 username VARCHAR(50), age INT );2. 非聚簇索引Secondary Index / 辅助索引索引和数据分开存储索引的叶子节点存的是主键值不是完整数据。-- 在 username 上建索引这是非聚簇索引 CREATE INDEX idx_username ON users(username);3. 回表当用非聚簇索引查询时SELECT * FROM users WHERE username zhangsan;执行过程是在idx_username索引中找到zhangsan拿到它的主键 id用这个 id 去聚簇索引中查完整数据行第 2 步就叫回表。回表会增加 IO是索引优化中要重点关注的问题。四、覆盖索引避免回表如果索引中已经包含了查询需要的所有字段就不用回表了。-- 建一个联合索引 CREATE INDEX idx_username_age ON users(username, age); -- 查询只需要 username 和 age索引中都有 SELECT username, age FROM users WHERE username zhangsan; -- 不需要回表因为索引已经覆盖了查询所需的所有字段这叫覆盖索引是优化查询的常用手段。五、联合索引与最左前缀联合索引是在多个字段上建的索引CREATE INDEX idx_a_b_c ON table(a, b, c);最左前缀原则联合索引(a, b, c)能支持的查询查询条件能否用索引WHERE a 1能WHERE a 1 AND b 2能WHERE a 1 AND b 2 AND c 3能WHERE b 2不能跳过了 aWHERE c 3不能跳过了 a 和 bWHERE a 1 AND c 3只能用 a 的部分规则查询条件必须从索引的最左列开始且不能跳过中间的列。六、索引的类型类型说明示例主键索引聚簇索引唯一且非空PRIMARY KEY (id)唯一索引值不能重复可以有 NULLUNIQUE INDEX (email)普通索引最基础的索引无约束INDEX (name)联合索引多个字段组合的索引INDEX (a, b, c)全文索引用于全文搜索FULLTEXT INDEX (content)前缀索引只索引字符串的前几个字符INDEX (name(10))七、索引的代价索引不是越多越好它有代价代价说明占用存储空间每个索引都要额外存储降低写入速度INSERT/UPDATE/DELETE 时需要维护索引增加优化器负担索引太多优化器选择困难原则只为高频查询的字段建索引不为低频字段建。适合建索引的场景主键必须建外键常用来做 JOIN建议建高频查询条件WHERE 中经常出现的字段排序字段ORDER BY 的字段分组字段GROUP BY 的字段不适合建索引的场景区分度低的字段如性别只有男/女、状态只有几个值很少查询的字段频繁更新的字段大文本字段如 TEXT可以用前缀索引八、查看索引使用情况-- 查看表的索引 SHOW INDEX FROM users; -- 用 EXPLAIN 分析查询 EXPLAIN SELECT * FROM users WHERE username zhangsan;EXPLAIN的关键字段字段说明type访问类型ref、range、index、ALL等ALL表示全表扫描key实际使用的索引rows预估扫描的行数Extra额外信息Using index表示用了覆盖索引
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

3个实战案例搞定wordpress网站跳转nginx避坑指南 2026/9/27 23:12:45

3个实战案例搞定wordpress网站跳转nginx避坑指南

3个实战案例搞定wordpress网站跳转nginx避坑指南 域名解析和服务器配置总是让新手头疼,尤其是遇到wordpress网站跳转nginx这种混合架构时,很多站长都卡在SSL证书绑定或备案信息不一致上。我接触过不少四川成都的甲方对接人…

阅读更多 →
旅游站用网页设计模板素材旅游怎么避开备案坑与性能优化 2026/9/27 23:12:39

旅游站用网页设计模板素材旅游怎么避开备案坑与性能优化

旅游站用网页设计模板素材旅游怎么避开备案坑与性能优化 备案流程一头雾水,是不是让你对着工信部ICP备案系统后台的截图发呆,连第一步填什么都不知道?别慌,很多独立站长在搭建旅游类网站时,都栽在了这个“非技术”环节上,明明代码写得溜,却在资质审…

阅读更多 →
自己做电视视频网站吗详细步骤 2026/9/27 23:12:39

自己做电视视频网站吗详细步骤

不会代码也能做视频站?3步搞定免费工具实操 自己不会代码想做网站,这确实是很多中小企业老板和技术小白最头疼的难题。以前做个视频站,动不动就要找外包,报价几万起步,改个按钮位置都要加钱,心里那个苦只有做过的人才懂。…

阅读更多 →
谢韦尔钢材缺陷检测数据集:6666张VOC+YOLO双格式实战指南 2026/9/27 23:12:19

谢韦尔钢材缺陷检测数据集:6666张VOC+YOLO双格式实战指南

简介:本资源为谢韦尔钢材表面缺陷检测数据集,面向从事工业质检、缺陷识别与深度学习目标检测的开发者与研究人员,可用于训练和验证钢材表面缺陷检测模型。数据集同时提供Pascal VOC与YOLO两种标注格式,包含6666张jpg图片及一一对应…

阅读更多 →
H5录音源码实战:从getUserMedia到MediaRecorder的兼容性避坑指南 2026/9/27 23:12:19

H5录音源码实战:从getUserMedia到MediaRecorder的兼容性避坑指南

简介:这是一套面向前端开发者的H5录音功能完整源码,基于JavaScript与HTML5标准实现,可跨PC端与移动端使用,适用于在线教育、会议记录、语音备忘等需要网页录音的场景。资源包共202个文件,约11.38MB,其中90个…

阅读更多 →
自贡市30m DEM数据处理全流程:从zip包到地形分析底图 2026/9/27 23:12:19

自贡市30m DEM数据处理全流程:从zip包到地形分析底图

简介:这份资源是四川省自贡市30米分辨率的DEM数字高程数据包,面向地理信息系统学习者、测绘与城市规划从业者及高校师生,可用于地形分析、洪水模拟、地质灾害评估与地图制作等教学实践场景。压缩包共12个文件,约14.72MB&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉