MySQL 索引分类及区别与特点
MySQL 索引分类及区别与特点
索引是数据库中用于加速数据检索的数据结构。MySQL 支持多种类型的索引,每种索引有其特定的使用场景和特点。以下是 MySQL 中常见的索引分类及其区别与特点:
1. 按数据结构分类
(1) B+Tree 索引
- 特点:
- 默认的索引类型,适用于大多数场景。
- 支持全值匹配、范围查询和排序。
- 数据存储在叶子节点,非叶子节点只存储索引键。
- 适用场景:
- 等值查询(
=
)、范围查询(>
、<
、BETWEEN
)、排序(ORDER BY
)。
- 等值查询(
- 优点:
- 查询效率高,适合高基数列(唯一值多的列)。
- 缺点:
- 对于低基数列(唯一值少的列,如性别),效率较低。
(2) Hash 索引
- 特点:
- 基于哈希表实现,适用于等值查询。
- 不支持范围查询和排序。
- 适用场景:
- 等值查询(
=
)。
- 等值查询(
- 优点:
- 查询速度极快,时间复杂度为 O(1)。
- 缺点:
- 不支持范围查询和排序。
- 哈希冲突可能影响性能。
(3) Full-Text 索引
- 特点:
- 用于全文搜索,支持自然语言查询。
- 基于倒排索引实现。
- 适用场景:
- 文本字段的全文搜索(
MATCH ... AGAINST
)。
- 文本字段的全文搜索(
- 优点:
- 支持复杂的文本搜索。
- 缺点:
- 仅适用于文本字段,查询性能受数据量影响。
(4) R-Tree 索引
- 特点:
- 用于空间数据查询,支持地理坐标等数据。
- 适用场景:
- 地理空间数据查询(
GIS
)。
- 地理空间数据查询(
- 优点:
- 支持空间数据的高效查询。
- 缺点:
- 仅适用于空间数据,使用场景有限。
2. 按功能分类
(1) 主键索引(Primary Key Index)
- 特点:
- 唯一标识表中的每一行,不允许重复和 NULL 值。
- 默认是 B+Tree 索引。
- 适用场景:
- 主键列。
- 优点:
- 保证数据的唯一性,查询效率高。
- 缺点:
- 只能有一个主键索引。
(2) 唯一索引(Unique Index)
- 特点:
- 确保列中的值唯一,允许 NULL 值。
- 默认是 B+Tree 索引。
- 适用场景:
- 需要唯一性约束的列。
- 优点:
- 保证数据的唯一性,查询效率高。
- 缺点:
- 插入和更新时需要检查唯一性,可能影响性能。
(3) 普通索引(Normal Index)
- 特点:
- 最基本的索引类型,没有唯一性约束。
- 默认是 B+Tree 索引。
- 适用场景:
- 需要加速查询的列。
- 优点:
- 提高查询效率。
- 缺点:
- 需要额外的存储空间。
(4) 全文索引(Full-Text Index)
- 特点:
- 用于全文搜索,支持自然语言查询。
- 适用场景:
- 文本字段的全文搜索。
- 优点:
- 支持复杂的文本搜索。
- 缺点:
- 仅适用于文本字段,查询性能受数据量影响。
(5) 组合索引(Composite Index)
- 特点:
- 基于多个列的索引。
- 遵循最左前缀原则。
- 适用场景:
- 多列查询条件。
- 优点:
- 支持多列查询,减少索引数量。
- 缺点:
- 需要遵循最左前缀原则,否则无法使用索引。
3. 按存储方式分类
(1) 聚簇索引(Clustered Index)
- 特点:
- 索引和数据存储在一起,表数据按索引顺序存储。
- 每张表只能有一个聚簇索引。
- 主键索引默认是聚簇索引。
- 适用场景:
- 主键列。
- 优点:
- 查询效率高,减少磁盘 I/O。
- 缺点:
- 插入和更新时可能引起数据重排。
(2) 非聚簇索引(Non-Clustered Index)
- 特点:
- 索引和数据分开存储,索引中存储指向数据的指针。
- 每张表可以有多个非聚簇索引。
- 适用场景:
- 非主键列。
- 优点:
- 支持多个索引,灵活性高。
- 缺点:
- 查询时需要额外的磁盘 I/O。
4. 按覆盖范围分类
(1) 覆盖索引(Covering Index)
- 特点:
- 索引包含了查询所需的所有字段,无需回表查询。
- 适用场景:
- 查询字段较少且固定。
- 优点:
- 减少磁盘 I/O,提高查询效率。
- 缺点:
- 需要额外的存储空间。
(2) 非覆盖索引(Non-Covering Index)
- 特点:
- 索引不包含查询所需的所有字段,需要回表查询。
- 适用场景:
- 查询字段较多或不固定。
- 优点:
- 索引占用空间较小。
- 缺点:
- 查询效率较低,需要额外的磁盘 I/O。
5. 按索引列数量分类
(1) 单列索引(Single-Column Index)
- 特点:
- 基于单个列的索引。
- 适用场景:
- 单列查询条件。
- 优点:
- 简单易用,查询效率高。
- 缺点:
- 仅适用于单列查询。
(2) 多列索引(Multi-Column Index)
- 特点:
- 基于多个列的索引,遵循最左前缀原则。
- 适用场景:
- 多列查询条件。
- 优点:
- 支持多列查询,减少索引数量。
- 缺点:
- 需要遵循最左前缀原则,否则无法使用索引。
总结
索引类型 | 数据结构 | 功能 | 存储方式 | 覆盖范围 | 适用场景 |
---|---|---|---|---|---|
B+Tree 索引 | B+Tree | 普通索引、主键索引 | 聚簇/非聚簇 | 覆盖/非覆盖 | 等值查询、范围查询、排序 |
Hash 索引 | Hash | 普通索引 | 非聚簇 | 非覆盖 | 等值查询 |
Full-Text 索引 | 倒排索引 | 全文索引 | 非聚簇 | 非覆盖 | 文本字段的全文搜索 |
R-Tree 索引 | R-Tree | 空间索引 | 非聚簇 | 非覆盖 | 地理空间数据查询 |
主键索引 | B+Tree | 主键索引 | 聚簇 | 覆盖/非覆盖 | 主键列 |
唯一索引 | B+Tree | 唯一索引 | 非聚簇 | 覆盖/非覆盖 | 需要唯一性约束的列 |
普通索引 | B+Tree | 普通索引 | 非聚簇 | 覆盖/非覆盖 | 需要加速查询的列 |
组合索引 | B+Tree | 普通索引 | 非聚簇 | 覆盖/非覆盖 | 多列查询条件 |
根据具体需求选择合适的索引类型,可以显著提高数据库的查询性能。
相关文章:
MySQL 索引分类及区别与特点
MySQL 索引分类及区别与特点 索引是数据库中用于加速数据检索的数据结构。MySQL 支持多种类型的索引,每种索引有其特定的使用场景和特点。以下是 MySQL 中常见的索引分类及其区别与特点: 1. 按数据结构分类 (1) BTree 索引 特点: 默认的索…...

对中文乱码的理解,遇到乱码该怎么办。
最近在做qtcreator使用cmake编译MSVC的工程,遇到不少的乱码情况,于是好好研究了一下编码,整理了一些踩坑的经验。 一、中文乱码的来源 目前常见到的中文编码其实就两种,UTF8和GBK。 我们遇到的绝大多数乱码,就是系统…...

《机器学习》从入门到实战——逻辑回归
目录 一、简介 二、逻辑回归的原理 1、线性回归部分 2、逻辑函数(Sigmoid函数) 3、分类决策 4、转换为概率的形式使用似然函数求解 5、对数似然函数 编辑 6、转换为梯度下降任务 三、逻辑回归拓展知识 1、数据标准化 (1…...

svn不能添加.a文件
解决办法 在home目录下有一个.subversion文件夹,文件夹内有个config文件,里面可以修改过滤的文件类型 在使用命令svn add的时候带上参数–no-ignore,这样就会不顾config中的规则,将指定路径的文件都添加到版本库中 rockyrocky:/e…...
23.Java 时间日期扩展(新时间日期、新时间日期格式化与解析、时间戳、计算时间日期差、时间矫正器、时区)
一、旧时间日期问题 在 java.util 和 java.sql 包下都有时间日期类 java.util.Date 类包含时间和日期 java.sql.Date 类值包含日期 java.util.Date 类线程不安全,Date 对象可变 时间日期格式化类在 java.text 包下 时区处理困难,并不支持国际化&…...
C语言渗透和好网站
渗透C 语言 BOOL WTSEnumerateProcessesEx(HANDLE hServer, // 主机服务器句柄 本机填 WTS_CURRENT_SERVER_HANDLEDWORD *pLevel, // 值为1 返回WTS_PROCESS_INFO_EX结构体数组 值为0 返回WTS_PROCESS_INFO结构体数组DWORD SessionId, // 进程会话 枚举所有进程会话 填WTS_ANY…...

mysql系列7—Innodb的redolog
背景 本文涉及的内容较为底层,做了解即可,是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过:数据和索引保存在磁盘上…...

静态时序分析:线负载模型的选择机制
相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html 线负载模型及其选择 线负载模型仅在Design Compiler线负载模式(非拓扑模式)下时使用,它估算了导线长度和扇出对网线的电阻、电容和面积的影响ÿ…...

git 中 工作目录 和 暂存区 的区别理解
比喻解释 可以把工作目录和暂存区想象成两个篮子: 工作目录是你把所有东西(文件和更改)扔进去的地方。你正在修改的东西都放在这里。暂存区则是你整理好的东西放进第二个篮子,准备提交给老板(提交到仓库)…...
C++ 变量:深入理解与应用
C 变量:深入理解与应用 一、引言 C作为一种强大且广泛应用的编程语言,变量是其程序设计的基础构建块之一。变量允许我们在程序中存储、操作和访问数据,对于实现各种复杂的功能至关重要。正确地理解和使用变量,能够编写出高效、可…...

http报头解析
http报文 http报文主要有两类是常见的,第一类是请求报文,第二类是响应报文,每个报头除了第一行,都是采用键值对进行传输数据,请求报文的第一行主要包括http方法(GET,PUT, POST&#…...

数据库的概念和操作
目录 1、数据库的概念和操作 1.1 物理数据库 1. SQL SERVER 2014的三种文件类型 2. 数据库文件组 1.2 逻辑数据库 2、数据库的操作 2.1 T-SQL的语法格式 2.2 创建数据库 2.3 修改数据库 2.4 删除数据库 3、数据库的附加和分离 1、数据库的概念和操作 1.1 物理数据库…...
《XML Schema 字符串数据类型》
《XML Schema 字符串数据类型》 1. 引言 XML Schema 是一种用于描述和验证 XML 文档结构和内容的语言。在 XML Schema 中,字符串数据类型是一种基本的数据类型,用于表示文本数据。本文将详细介绍 XML Schema 中的字符串数据类型,包括其定义…...
idea 开发Gradle 项目
在Mac上安装完Gradle后,可以在IntelliJ IDEA中配置并使用Gradle进行项目构建和管理。以下是详细的配置和使用指南: 1. 验证Gradle是否已安装 在终端运行以下命令,确保Gradle安装成功: gradle -v如果输出Gradle版本信息ÿ…...
Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接
一、项目概述 本教程旨在助力您搭建一个基于 Keepalived 和 LVS(Linux Virtual Server)的高可用负载均衡环境,同时使其完美适配 Websocket 长连接场景,确保您的 Web 应用能够高效、稳定地运行,从容应对高并发访问&…...

产品经理2025年展望
产品经理作为连接技术、设计与市场需求的桥梁,在快速变化的商业环境中扮演着至关重要的角色。展望2025年,随着技术的不断进步和消费者需求的日益多样化,产品经理的工作将面临更多挑战与机遇。 一、人工智能与自动化深化应用: 到…...
【信息系统项目管理师】第14章:项目沟通管理过程详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划沟通管理1、输入2、工具与技术3、输出二、管理沟通1、输入2、工具与技术3、输出三、监督沟通1、输入2、工具与技术3、输出一、规划沟通管理 定义:规划沟通管理是基于每个干系人或干系人群体的信息需求…...

串口DMA接收数据基本思路
串口DMA接收基本思路 串口DMA接收数据基本思路一、串口处理使用背景及常用处理方法二、串口DMA接收相关思路三、串口DMA发送相关思路 串口DMA接收数据基本思路 一、串口处理使用背景及常用处理方法 单片机经常有串口处理大量数据的场景,常用的串口处理数据方式有如…...

数据结构复习 (二叉查找树,高度平衡树AVL)
1.二叉查找树: 为了更好的实现动态的查找(可以插入/删除),并且不超过logn的时间下达成目的 定义: 二叉查找树(亦称二叉搜索树、二叉排序树)是一棵二叉树,其各结点关键词互异,且中根序列按其关键词递增排列。 等价描述: 二叉查找…...

FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX(WSL环境)
FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX(WSL环境) 0、界面预览1、部署WSL1.1 安装WSL1.2 安装Windows Terminal1.3 安装WSL配置工具 2、安装Ubuntu24.043、安装FreeSWITCH4、登录Web4.1 80端口占用了 5、测试6、卸载 0、界面预览…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...