当前位置: 首页 > news >正文

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 支持多种类型的索引&#xff0c;每种索引有其特定的使用场景和特点。以下是 MySQL 中常见的索引分类及其区别与特点&#xff1a; 1. 按数据结构分类 (1) BTree 索引 特点&#xff1a; 默认的索…...

对中文乱码的理解,遇到乱码该怎么办。

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

《机器学习》从入门到实战——逻辑回归

目录 一、简介 二、逻辑回归的原理 1、线性回归部分 2、逻辑函数&#xff08;Sigmoid函数&#xff09; 3、分类决策 4、转换为概率的形式使用似然函数求解 5、对数似然函数 ​编辑 6、转换为梯度下降任务 三、逻辑回归拓展知识 1、数据标准化 &#xff08;1&#xf…...

svn不能添加.a文件

解决办法 在home目录下有一个.subversion文件夹&#xff0c;文件夹内有个config文件&#xff0c;里面可以修改过滤的文件类型 在使用命令svn add的时候带上参数–no-ignore&#xff0c;这样就会不顾config中的规则&#xff0c;将指定路径的文件都添加到版本库中 rockyrocky:/e…...

23.Java 时间日期扩展(新时间日期、新时间日期格式化与解析、时间戳、计算时间日期差、时间矫正器、时区)

一、旧时间日期问题 在 java.util 和 java.sql 包下都有时间日期类 java.util.Date 类包含时间和日期 java.sql.Date 类值包含日期 java.util.Date 类线程不安全&#xff0c;Date 对象可变 时间日期格式化类在 java.text 包下 时区处理困难&#xff0c;并不支持国际化&…...

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

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

静态时序分析:线负载模型的选择机制

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

git 中 工作目录 和 暂存区 的区别理解

比喻解释 可以把工作目录和暂存区想象成两个篮子&#xff1a; 工作目录是你把所有东西&#xff08;文件和更改&#xff09;扔进去的地方。你正在修改的东西都放在这里。暂存区则是你整理好的东西放进第二个篮子&#xff0c;准备提交给老板&#xff08;提交到仓库&#xff09;…...

C++ 变量:深入理解与应用

C 变量&#xff1a;深入理解与应用 一、引言 C作为一种强大且广泛应用的编程语言&#xff0c;变量是其程序设计的基础构建块之一。变量允许我们在程序中存储、操作和访问数据&#xff0c;对于实现各种复杂的功能至关重要。正确地理解和使用变量&#xff0c;能够编写出高效、可…...

http报头解析

http报文 http报文主要有两类是常见的&#xff0c;第一类是请求报文&#xff0c;第二类是响应报文&#xff0c;每个报头除了第一行&#xff0c;都是采用键值对进行传输数据&#xff0c;请求报文的第一行主要包括http方法&#xff08;GET&#xff0c;PUT&#xff0c; 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 中&#xff0c;字符串数据类型是一种基本的数据类型&#xff0c;用于表示文本数据。本文将详细介绍 XML Schema 中的字符串数据类型&#xff0c;包括其定义…...

idea 开发Gradle 项目

在Mac上安装完Gradle后&#xff0c;可以在IntelliJ IDEA中配置并使用Gradle进行项目构建和管理。以下是详细的配置和使用指南&#xff1a; 1. 验证Gradle是否已安装 在终端运行以下命令&#xff0c;确保Gradle安装成功&#xff1a; gradle -v如果输出Gradle版本信息&#xff…...

Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

一、项目概述 本教程旨在助力您搭建一个基于 Keepalived 和 LVS&#xff08;Linux Virtual Server&#xff09;的高可用负载均衡环境&#xff0c;同时使其完美适配 Websocket 长连接场景&#xff0c;确保您的 Web 应用能够高效、稳定地运行&#xff0c;从容应对高并发访问&…...

产品经理2025年展望

产品经理作为连接技术、设计与市场需求的桥梁&#xff0c;在快速变化的商业环境中扮演着至关重要的角色。展望2025年&#xff0c;随着技术的不断进步和消费者需求的日益多样化&#xff0c;产品经理的工作将面临更多挑战与机遇。 一、人工智能与自动化深化应用&#xff1a; 到…...

【信息系统项目管理师】第14章:项目沟通管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划沟通管理1、输入2、工具与技术3、输出二、管理沟通1、输入2、工具与技术3、输出三、监督沟通1、输入2、工具与技术3、输出一、规划沟通管理 定义:规划沟通管理是基于每个干系人或干系人群体的信息需求…...

串口DMA接收数据基本思路

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

数据结构复习 (二叉查找树,高度平衡树AVL)

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

FreeSWITCH 简单图形化界面39 - Windows安装FreeSWITCH For IPPBX(WSL环境)

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

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...