当前位置: 首页 > 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、界面预览…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...