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

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...