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、界面预览…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
