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、界面预览…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
