千家信息网

什么是MySQL索引

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家介绍什么是MySQL索引,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言:索引是MySQL数据库中的重要对象之一,索引的目的在于提高查询效率。可以类比字典中的目录
千家信息网最后更新 2025年11月07日什么是MySQL索引

这篇文章给大家介绍什么是MySQL索引,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

前言:

索引是MySQL数据库中的重要对象之一,索引的目的在于提高查询效率。可以类比字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同。为了避免混乱,本文将只关注于InnoDB引擎下的B+Tree索引。

1.索引结构及原理

要想了解索引的原理,首先要知道索引的结构,下面简单介绍下B+Tree索引的结构。

首先我们要知道索引是一种数据结构。在InnoDB中,每个索引其实都是一颗B+树,B+树是为了磁盘及其他存储辅助设备而设计的一种平衡查找树(不是二叉树),在B+树中,所有的数据都在叶子节点,且每一个叶子节点都带有指向下一个节点的指针,形成了一个有序的链表。一般情况下数据库的B+树的高度一般在2~4层,这就是说找到某一键值的行记录最多需要2到4次逻辑IO,下图简单展示了B+树索引的结构。

cdn.nlark.com/yuque/0/2020/png/119537/1589268320343-47af018e-3e88-4095-b2c0-50982eb373a6.png">

2.索引的分类及创建方法

在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。根据叶子节点的内容,索引类型分为主键索引和非主键索引。主键索引的叶子节点存的是整行数据。在InnoDB里,主键索引也被称为聚簇索引(clustered index)。非主键索引的叶子节点内容是索引列和主键的值。在InnoDB里,非主键索引也被称为二级索引(secondary index)或辅助索引

一张InnoDB表必须有一个聚簇索引,当有主键时,会以主键作为聚簇索引;如果没有显式定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引,则MySQL自动为InnoDB表生成一个隐含字段作为主键。除聚簇索引外的其他索引都可称为二级索引,比如我们常用到的唯一索引、普通索引、联合索引等。

上面讲过聚簇索引的叶子节点存的是整行数据,当某条查询使用的是聚簇索引时,只需要扫描聚簇索引一颗B+树即可得到所需记录,如果想通过二级索引来查找完整的记录的话,需要通过回表操作,也就是在通过二级索引找到主键值之后再到聚簇索引中查找完整的记录。也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。

下面介绍下索引的创建、删除等操作方法。

# 建表时指定索引CREATE TABLE `t_index` (  `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',  `col1` int(11) NOT NULL,  `col2` varchar(20) NOT NULL,  `col3` varchar(50) NOT NULL,  `col4` int(11) NOT NULL,  PRIMARY KEY (`increment_id`),  UNIQUE KEY `uk_col1` (`col1`),    KEY `idx_col2` (`col2`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='测试索引';# 创建索引(两种方法)# 普通索引alter table `t_index` add index idx_col3 (col3);create index idx_col3 on t_index(col3);# 唯一索引alter table `t_index` add unique index uk_col4 (col4);create unique index uk_col4 on t_index(col4);# 联合索引alter table `t_index` add index idx_col3_col4 (col3,col4);create index idx_col3_col4 on t_index(col3,col4);# 删除索引alter table `t_index` drop index uk_col4;DROP INDEX idx_col3_col4 on t_index;
3.索引的优缺点及使用建议

索引的优点显而易见是可以加速查询,但创建索引也是有代价的。首先每建立一个索引都要为它建立一棵B+树,会占用额外的存储空间;其次当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。所以,索引的创建及使用时有原则的,下面给出几点索引使用的建议:

  • 显式创建主键索引,建议使用自增ID作为主键。

  • 只为用于搜索、排序、分组、连接的列创建索引。

  • 对经常更新的表避免创建过多的索引。

  • 建立联合索引时,可选择性高的列放在前面。

  • 尽量不要在可选择性差的列上建索引,如:性别、状态列等。

  • 尽量使用覆盖索引进行查询,避免回表带来的性能损耗。(覆盖索引包含要查询的所有列)

  • select后面只写查询需要用到的字段,去掉不需要的字段。

  • 定位并删除表中的重复和冗余索引。

关于什么是MySQL索引就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

索引 数据 查询 节点 内容 叶子 结构 存储 目录 字段 建议 引擎 方法 联合 普通 也就是 位置 原理 可选择性 字典 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科学软件开发教程 桓台制造业管理软件开发公司 网络安全管理应用安全 腾讯云服务器校园 互联网数据库自考答案 广东pc软件开发哪家好 河北什么软件开发服务价格优惠 公安局网络安全监控指挥中心 朝阳区应用软件开发服务咨询报价 mysql数据库最新版 河北网络技术咨询询问报价 连接服务器数据库连接超时 教育局网络安全宣传周讲话 超大文件怎么从服务器上拷过来 网络安全支付有哪些 数据库题库及答案 食品安全软件开发 oracle数据库审计哪些信息 哪些信息是由数据库管理提供的 腾讯微信语音聊天数据库能不能查 奥鹏东北大学数据库技术考核 计算机网络技术怎么学号 网络安全靠人蒙文报纸 代查数据库 部落冲突要关闭所有服务器了吗 搭建自己的流量服务器 宝山区第三方软件开发服务保障 类似rpg的电脑服务器 奉贤区企业软件开发创造辉煌 5g网络服务器多少钱
0