首页/新闻资讯/正文详情

数据库中的索引

发布时间:2026/9/27 22:15:42 来源:云帆数科 栏目:资讯中心
数据库中的索引
一、索引到底解决什么问题先看没有索引时数据库怎么查数据。假设有一张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表示用了覆盖索引

相关推荐

平板电视SEO优化关键词避坑指南:别再被建站公司拖一周了
平板电视SEO优化关键词避坑指南:别再被建站公司拖一周了

平板电视SEO优化关键词避坑指南:别再被建站公司拖一周了 改个需求建站公司拖一周,这种憋屈谁懂?我刚做平板电视垂直站那会儿,提了个首页关键词调整的建议,对方客服说“排期在排队,下周一回你”。等到下周一,发现他们只是把后台的标题改了,代码里的… · 2026/9/27 22:15:42

Easy-Vibe高级开发篇阅读笔记(四)——CC教程之如何让 Claude Code 长时间工作:TaoToken 统一 Key 与 Stop Hook 配置实战
Easy-Vibe高级开发篇阅读笔记(四)——CC教程之如何让 Claude Code 长时间工作:TaoToken 统一 Key 与 Stop Hook 配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:15:35

腾讯位置服务MCP Server(SSE)接入TaoToken:统一Key配置与场景验证指南
腾讯位置服务MCP Server(SSE)接入TaoToken:统一Key配置与场景验证指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 22:15:35

网站建设费计入销售费用的子目避坑指南
网站建设费计入销售费用的子目避坑指南

网站建设费计入销售费用的子目避坑指南 上周刚帮一个做建材的老客户处理完网站被黑挂马的烂摊子,对方老板急得直拍桌子,问我现在该咋办。这种场景太常见了,很多新手做网站只顾着前端好不好看,完全没想过后端安全和财务合规的问题,等出事了才想起来查账。… · 2026/9/27 22:53:18

基于 open supOS 的工业 APP 开发与开源代码贡献:平台架构、实践路径与生态演进
基于 open supOS 的工业 APP 开发与开源代码贡献:平台架构、实践路径与生态演进

一、工业软件与开源生态的交汇点 全球制造业正加速迈向智能化、绿色化转型,工业软件已成为驱动实体工业深刻变革的核心力量。在这一背景下,open supOS 作为一个基于统一命名空间(Unified Namespace,UNS)架构、由一系列… · 2026/9/27 22:53:12

五个常被混用的概念:本体、分类法、知识图谱、语义层、上下文图谱
五个常被混用的概念:本体、分类法、知识图谱、语义层、上下文图谱

如果你在与AI、本地化或数据相关的领域工作,大概率听过本体(Ontology)、分类法(Taxonomy)、知识图谱(Knowledge Graph)、语义层(Semantic Layer)、上下文图谱&#xff08… · 2026/9/27 22:53:12

卖域名出去客户犯法怎么办 3个实战案例教你自保
卖域名出去客户犯法怎么办 3个实战案例教你自保

卖域名出去客户犯法怎么办 3个实战案例教你自保 网站被黑挂马不知道怎么办?很多老板以为换个密码就万事大吉,其实那是扯淡。我见过太多企业站因为一句“服务器在阿里云很安全”就放松警惕,结果一夜之间首页变成赌博广告,后台代码被植入了后门。更惨的是… · 2026/9/27 22:53:12

3个坑搞定网站的前端和后端,一文搞懂搭建全流程
3个坑搞定网站的前端和后端,一文搞懂搭建全流程

3个坑搞定网站的前端和后端,一文搞懂搭建全流程 刚接手网站项目,是不是对着备案流程一头雾水?域名解析改了三次没生效,服务器选来选去还是怕被坑。别急,今天咱们不整虚的,直接 一文搞懂 网站的前端和后端怎么从零搭建。… · 2026/9/27 22:53:12

linux笔记归纳23:五种IO模型与非阻塞IO
linux笔记归纳23:五种IO模型与非阻塞IO

五种IO模型与非阻塞IO 目录 五种IO模型与非阻塞IO 一、五种IO模型 1.1.IO效率问题 1.2.五种IO模型 1.3.同步与异步 1.4.阻塞IO 1.5.非阻塞IO 1.6.信号驱动IO 1.7.多路转接 1.8.异步IO 二、非阻塞IO 2.1.fcntl函数 2.2.实现阻塞与非阻塞读取 一、五种IO模型 1.1.… · 2026/9/27 22:53:00

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码