爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      首页 知识中心 数据库 文章详情页

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      2023-07-05 06:00:58 阅读次数:436

      MySQL,索引

      索引

      1.什么是数据库索引?

      1.1 概念

      • 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。

      索引(index)可以说是一本书的目录(index)。【两者的英文是同一个只是表现的形式不一样。】

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      1.2 作用

      1. 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
      2. 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
      3. 如果没有索引,在数据库中进行查找就要把整个表遍历一遍,很耗时.
      4. 索引对于提高数据库的性能 (主要是提高查找效率,修改增加删除效率还会有所下降) 有很大的帮助。
      5. 本质上索引就是为了避免数据库进行顺序查找,提高查找效率.

      1.3 使用场景

      要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

      1. 数据量较大,且经常对这些列进行条件查询。
      2. 该数据库表的插入操作,及对这些列的修改操作频率较低。
      3. 索引会占用额外的磁盘空间。(用空间效率换取时间效率) 满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。 反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。

      1.4 索引的优缺点

      思考一个问题:

      树的目录一旦决定了,后续每次对书的内容进行调整时,都可能会印象到目录的准确性,就需要重新调整目录。   数据库的索引也是一样的情况:

      当我们 对 数据进行“增删改”操作的时候,往往也需要同步调整索引的结构。   索引带来的好处:提高了查询效率 索引带来的坏处:占用了更多的空间,拖慢了增删查改的速度。


      从表面来上看,似乎索引的坏处 比 索引带来的好处要多。但!这不必意味着 弊大于利!! 因为在实际需求的场景中,查询操作往往是最高频率的操作。 相对于“增删改” 的使用频率则低的可怜。 因此,查询作为一个高频操作,索引对其来说是不可缺少,   另外,有索引之后对于查询的效率的提升使非常巨大!!! 当MySQL里面的数据量级 达到千万级别的时候(一个表里就有几千万,甚至破亿的数据)再去遍历表,就会非常非常的低效!!!   在另一方面:

      MySQL在进行数据比较的时候,不是像我们编程那样,一个for循环(这样的想法是错误的)

      编程上的查询是在内存中的比较;MySQL中的比较是在硬盘上比较。 也就是说:在MySQL中的每一次比较都会涉及到硬盘的 IO 操作。


      又因为硬盘的 IO 的 访问速度 比 内存 慢 3 ~ 4 个数量级(几千~万倍)。 所以,如果是查询的操作更是慢上加慢!!! 【这里又一次体现了索引的好处:能使这里的查找效率提高数倍】


      1.5 如何使用

      • 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

      查看索引

      命令格式:show index from 表名;

       show index from student;
      

      其作用:查看一个数据表上都有哪些索引

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      创建索引

      命令格式:

      create index 索引名字 on 表名(列名)
      

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      注意:

      创建索引这件事是一个非常低效的事情,尤其是当前表里面已经有很多数据的时候。 它需要给该列的每一行数据都设置一个索引,因此在数据量庞大的情况下,创建的索引的过程是非常耗时的!

      因此,以后在工作的时候,看到某个数据库的一个表没有索引,千万不要贸然去创建一个索引 你啪的回车一敲,下一秒数据库就挂了。

      操作数据库本身就是一个危险操作。必须时刻小心谨慎。


      删除某个表中的索引

      命令格式:

      drop index 索引名字 on 表名
      

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      删除索引操作和创建同理,都是非常低效的事情,也容易让数据库挂了


      2.索引的数据结构是什么?

      2.1 可以是二叉搜索树或者红黑树吗?

      • 不可以
      1. 二叉搜索树的平均查找效率是O(logN)
      2. 如果数据很多的话,二叉搜索树最多俩个分支,所以树的深度会很大,查找效率其实不高
      3. 如果是查找范围的时候还需要对二叉搜索树进行中序遍历 (因为二叉搜索树中序遍历是有序序列) 又不是很高效O(N)

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      2.2 可以是哈希表吗?

      • 不可以
      1. 如果是处理相等情况,哈希表很高效
      2. 但是哈希表不可以处理其他逻辑,比如范围查找 > >= < <= between and
      3. 因为哈希的查找是把key带入哈希函数得到下标,再根据下标取对应的链表,再去遍历链表比较key是否相等,无法进行范围查找

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      2.3 可以是B树吗?

      • 本质可以,但为了更高的效率不选它

      B树与二叉树差异:

      1. 为了结点不是2叉而是N叉
      2. 为了结点不是存储一个数据,而是可能存储多个数据
      3. 每个节点存储数据的个数和该节点的度是有关系的 度=存储数据的个数+1
      4. 此时在B树上查找就是一个N分查找,效率比二叉树还高
      5. 由于每个及节点存储了多个数据,每个节点又有多个度,所以和二叉树相比,B树的高度会低很多,查找起来效率一会高一下.而且简单的范围查找会容易一些.

      在整个数据量的条件一定的情况下,N叉搜索树的高度 一定比 二叉搜索树要低。 在数据库中使用的这个多叉树,又不太一样,是一个很特殊的树,我们称为 B+ 树。 【B+ 树 是 数据库中最常见的数据结构】 注意!数据库有很多种,每个数据库底层又支持多种存储引擎 这些存储引擎实现了数据库具体按照什么结构来存储的程序。 那么就意味着 每个存储引擎 存储数据的结构 可能都不一样,背后的索引数据结构可能也不同。 所以,这里面可能会有很多种多叉树来去表示这里的数据结构。 只是 B+ 树 是 最常用的一种数据结构。 那么,B+ 树 又是什么样子的? 想要 理解 B+ 树,需要先理解它的前身 B 树( B-树:这个是B树的另一种写法,而不是B减树)

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      2.4 可以是B+树吗?

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      与B-树相比的差异:

      1. 每一层的元素之间都链接在一起
      2. 数据(表的一行记录)只存在叶子节点上,非叶子节点只保存一些辅助查找的边界信息
      3. 查询任一条记录都比较平均,不会出现效率差异很大的情况
      4. 不需要额外进行中序遍历,遍历叶子节点就是中序结果,所以处理范围查找很高效
      5. 叶子放在磁盘上,非叶子放在内存中,减少了访问磁盘的次数,查找也就更高效了,而且索引在内存中实际开销有不高
      6. 索引引起的效果就是加快查找效率, 减慢插入删除修改的效率 (因为需要同步调整索引结果)
      7. 索引也会占用额外空间(本质上使用空间换取时间)
      8. 给具体表中某列加索引的时候,加在主键的索引和加在其他列的索引是截然不同的.
      9. 主键索引的叶子结点value存的是表的一行完整数据, 其他索引的叶子节点value只存的是主键的信息(如id)

      因为B树 是 B+树的前身,那么B+树想对比B树又做出了那些改变?

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      疑问:为什么B+树这么去构建?

      你可以这么认为 B+ 树 就是为了 数据库索引量身打造的!!!!

      1. 使用B+树进行查找的时候,整体IO次数也是比较少的。
      2. 所有的查询最终多会落在叶子结点上,每次查询的 IO 次数都是差不多的,故查询的速度是稳定的,相差不大。
      3. 叶子结点用链表链接之后,非常适合进行范围查找
      4. 所有的数据存储(数据又称载荷)都是放到叶子结点上的。也就是说非叶子结点中只需要保存key值就可以了。因此非叶子节点整体占用空间较小,甚至可以加载到内存中。(一旦能够全部放在内存里,此时硬盘上的IO次数几乎就为零了)

      例如:

      找到 大于等于5,且小于等于 11 的值。

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)

      所有的数据存储(数据又称载荷)都是放到叶子结点上的。也就是说非叶子结点中只需要保存key值就可以了。因此非叶子节点整体占用空间较小,甚至可以加载到内存中。(一旦能够全部放在内存里,此时硬盘上的IO次数几乎就为零了)

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      总结

      【MySQL】—— 数据库索引 (索引是什么?B树,B+树)


      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/panyujie/5262187,作者:Perceus,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:【MySQL】—— 数据库表的设计 ( 一对一,一对多,多对多)

      下一篇:【MySQL】—— 数据库 JDBC概述与连接

      相关文章

      2025-05-19 09:05:01

      Navicat 连接MySQL 8.0.11 出现2059错误 解决

      Navicat 连接MySQL 8.0.11 出现2059错误 解决

      2025-05-19 09:05:01
      MySQL , Navicat , 解决 , 连接
      2025-05-19 09:04:38

      mysql只有在任务处于完成状态才能运行

      mysql只有在任务处于完成状态才能运行

      2025-05-19 09:04:38
      MySQL , 任务 , 数据库 , 查询 , 状态
      2025-05-16 09:15:24

      MySQL 表的内外连接

      MySQL 表的内外连接

      2025-05-16 09:15:24
      MySQL , 显示 , 连接
      2025-05-14 10:33:16

      30天拿下Rust之向量

      在Rust语言中,向量(Vector)是一种动态数组类型,可以存储相同类型的元素,并且可以在运行时改变大小。向量是Rust标准库中的一部分,位于std::vec模块中。

      2025-05-14 10:33:16
      Rust , 使用 , 元素 , 向量 , 方法 , 索引 , 迭代
      2025-05-14 10:33:16

      30天拿下Rust之切片

      在Rust中,切片是一种非常重要的引用类型。它允许你安全地引用一段连续内存中的数据,而不需要拥有这些数据的所有权。切片不包含分配的内存空间,它仅仅是一个指向数据开始位置和长度的数据结构。

      2025-05-14 10:33:16
      amp , end , 切片 , 字符串 , 引用 , 索引 , 迭代
      2025-05-14 10:03:13

      【MySQL】-数据库优化(索引)

      索引(index)是帮助数据库高效获取数据的数据结构

      2025-05-14 10:03:13
      index , Tree , 二叉 , 搜索 , 数据 , 索引 , 节点
      2025-05-14 10:03:13

      MySQL 索引优化以及慢查询优化

      MySQL 是一种广泛使用的关系型数据库管理系统,因其性能优异和使用便捷而备受欢迎。然而,随着数据量的增长和查询复杂度的增加,性能瓶颈也变得越来越明显。

      2025-05-14 10:03:13
      MySQL , 优化 , 使用 , 性能 , 数据库 , 查询 , 索引
      2025-05-14 10:02:48

      SQL Server 执行计划1--数据查询

      SQL语言(在SQL Server也叫做T-SQL)是一个解释性的语言(declarative language), 主要是描述的是人想要从数据库里获取数据的逻辑。但数据库接收到SQL语句后,会根据相关的统计信息制定自己的取数策略(执行计划)。

      2025-05-14 10:02:48
      Index , 查找 , 索引
      2025-05-14 09:51:21

      mysql数据库中decimal数据类型比较大小

      在MySQL中,DECIMAL数据类型用于存储精确的数值,它非常适合用于需要高精度计算的场景,如金融应用。当我们需要在MySQL数据库中比较DECIMAL类型数据的大小时,可以使用标准的比较运算符,如>, <, >=, <=, = 和 <>(或!=)。

      2025-05-14 09:51:21
      MySQL , SQL , 数据类型 , 查询 , 比较 , 示例
      2025-05-14 09:51:15

      mysql 语句如何优化

      MySQL语句的优化是一个复杂但重要的过程,因为它可以显著提高数据库的性能。

      2025-05-14 09:51:15
      JOIN , MySQL , 优化 , 使用 , 排序 , 查询 , 索引
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5257693

      查看更多

      最新文章

      Navicat 连接MySQL 8.0.11 出现2059错误 解决

      2025-05-19 09:05:01

      mysql只有在任务处于完成状态才能运行

      2025-05-19 09:04:38

      MySQL 表的内外连接

      2025-05-16 09:15:24

      30天拿下Rust之切片

      2025-05-14 10:33:16

      MySQL 索引优化以及慢查询优化

      2025-05-14 10:03:13

      【MySQL】-数据库优化(索引)

      2025-05-14 10:03:13

      查看更多

      热门文章

      Confluence 6 MySQL 输入你的数据库细节

      2023-04-27 08:03:27

      MySQL timestamp(3)问题

      2023-04-27 08:00:12

      正确理解Mysql的列索引和多列索引

      2023-05-12 07:20:42

      MySQL安全小技巧

      2023-05-06 10:22:49

      MySQL数据库的安装(安装以及简单数据库操作)

      2023-05-06 10:22:26

      MySQL的数据库database(二)

      2023-04-23 09:35:19

      查看更多

      热门标签

      数据库 mysql 字符串 数据结构 MySQL 算法 redis oracle java sql python 数据 索引 SQL 查询
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【MySQL】基础语法详解:SELECT, INSERT, UPDATE, DELETE轻松上手

      MySQL 的日期和时间函数

      MySQL中的limit分页优化

      MySQL的SQL TRACE一例

      谈谈MySql的索引

      MySQL in和exists的取舍

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号