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

MySQL主要使用的几种索引算法

MySQL 索引算法详解

在 MySQL 中,索引是一种提高查询速度的数据结构。不同的索引算法适用于不同的查询场景,本文将详细介绍 MySQL 的几种主要索引算法。


1. B+Tree 索引(默认索引)

1.1 存储结构

B+Tree(B+ 树)是一种平衡多路搜索树,其特点是:

  • 所有数据存储在叶子节点,内部节点仅存储索引值。
  • 叶子节点之间通过双向链表相连,便于范围查询。
  • 所有叶子节点在同一层,保持查询效率稳定。

1.2 适用存储引擎

  • InnoDB(默认)
  • MyISAM

1.3 优势

✅ 适用于 范围查询(BETWEEN、>、< 等)
✅ 适用于 ORDER BY 排序查询
✅ 叶子节点形成链表,支持 高效的顺序遍历

1.4 局限性

不适用于全文搜索(需要使用 Full-Text 索引)
插入/删除频繁时可能导致索引分裂


2. Hash 索引(适用于等值查询)

2.1 存储结构

  • 通过 哈希函数 计算键值映射到哈希桶,快速定位数据。
  • 适用于 键值对查询(key-value)

2.2 适用存储引擎

  • Memory(Heap)引擎
  • InnoDB(Adaptive Hash Index,自动优化的哈希索引)

2.3 优势

✅ 适用于 等值查询(=),查询速度快(O(1) 时间复杂度)
✅ 哈希表查询不会随数据量增加而变慢

2.4 局限性

不支持范围查询(>、<、BETWEEN)
不支持 ORDER BY 排序
容易哈希冲突,影响查询效率


3. Full-Text(全文索引)

3.1 存储结构

  • 倒排索引(Inverted Index),存储单词 -> 文档 ID 的映射。
  • 适用于 全文搜索(如文章、评论、日志)。

3.2 适用存储引擎

  • InnoDB
  • MyISAM

3.3 优势

✅ 适用于 全文搜索(MATCH() AGAINST())
✅ 比 LIKE '%xx%' 查询快得多

3.4 局限性

不适用于小数据量(索引维护开销大)
不能完全替代搜索引擎(如 Elasticsearch)


4. R-Tree(空间索引)

4.1 存储结构

  • R-Tree(多维索引结构),适用于存储和查询 地理坐标(点、矩形、多边形)

4.2 适用存储引擎

  • MyISAM
  • InnoDB(MySQL 8.0 之后支持 SPATIAL 索引)

4.3 优势

✅ 适用于 地理信息查询(如“某点附近的餐馆”)
✅ 适用于 空间范围查询(如“某个区域内的所有数据”)

4.4 局限性

❌ 仅 MyISAM 支持,InnoDB 仅在 MySQL 8.0+ 支持
适用场景较窄,一般用于 GIS 应用


5. Bitmap 索引(适用于低基数列)

5.1 存储结构

  • 位图(Bitmap),用 0/1 位 记录某个值在不同数据行中的出现情况。

5.2 适用存储引擎

  • MySQL 不直接支持(Oracle、PostgreSQL 支持)

5.3 优势

✅ 适用于 低基数列(如性别、状态、布尔值)
节省存储空间,查询时可用位运算加速

5.4 局限性

不适用于高基数列(如手机号、用户名)
不支持动态更新(更新代价大)


6. 索引算法对比总结

索引类型适用存储引擎适用查询场景优势局限性
B+Tree(默认)InnoDB、MyISAM范围查询、排序查询、主键/外键适用于大多数场景插入/删除频繁时可能导致索引分裂
Hash 索引Memory、InnoDB(自适应)精确匹配(=)查询速度快(O(1))不支持范围查询、排序、模糊查询
Full-Text 索引InnoDB、MyISAM全文搜索适用于大文本字段(如文章搜索)不能完全替代搜索引擎
R-Tree(空间索引)MyISAM、InnoDB(8.0+)GIS 地理查询适用于空间数据仅适用于 MyISAM(8.0+ InnoDB 支持)
Bitmap 索引MySQL 不支持低基数列(如性别)高效存储和查询更新代价高,不适用于高基数列

7. 结论

  • 默认使用 B+Tree 索引(适用大部分情况)。
  • 等值查询用 Hash 索引,但 InnoDB 默认不支持(Adaptive Hash Index 除外)。
  • 全文搜索用 Full-Text 索引,比 LIKE '%xx%' 查询更快。
  • GIS 查询用 R-Tree 索引SPATIAL 索引)。
  • 低基数字段(如性别)可以考虑 Bitmap 索引,但 MySQL 不支持。

选择合适的索引结构,可以极大提升 MySQL 查询性能!

相关文章:

MySQL主要使用的几种索引算法

MySQL 索引算法详解 在 MySQL 中&#xff0c;索引是一种提高查询速度的数据结构。不同的索引算法适用于不同的查询场景&#xff0c;本文将详细介绍 MySQL 的几种主要索引算法。 1. BTree 索引&#xff08;默认索引&#xff09; 1.1 存储结构 BTree&#xff08;B 树&#xff…...

Linux生成自签证书【Nginx】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…...

网络安全 | 加密技术揭秘:保护数据隐私的核心

网络安全 | 加密技术揭秘&#xff1a;保护数据隐私的核心 一、前言二、对称加密技术2.1 原理2.2 优点2.3 缺点2.4 应用场景 三、非对称加密技术3.1 原理3.2 优点3.3 缺点3.4 应用场景 四、哈希函数4.1 原理4.2 优点4.3 缺点4.4 应用场景 五、数字签名5.1 原理5.2 优点5.3 缺点5…...

使用服务器部署DeepSeek-R1模型【详细版】

文章目录 引言deepseek-r1IDE或者终端工具算力平台体验deepseek-r1模型总结 引言 在现代的机器学习和深度学习应用中&#xff0c;模型部署和服务化是每个开发者面临的重要任务。无论是用于智能推荐、自然语言处理还是图像识别&#xff0c;如何高效、稳定地将深度学习模型部署到…...

DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区

Direct3D 11 总结 —— 4 绘制三角形_direct绘制三角形-CSDN博客 DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区 - X_Jun - 博客园 练习题 粗体字为自定义题目 尝试交换三角形第一个和第三个顶点的数据&#xff0c;屏幕将显示什么&#xff1f;为什么&…...

Continue 与 CodeGPT 插件 的对比分析

以下是 Continue 与 CodeGPT 插件 的对比分析&#xff0c;涵盖功能定位、适用场景和核心差异&#xff1a; 1. 功能定位 工具核心功能技术基础Continue专注于代码自动补全和上下文感知建议&#xff0c;支持多语言&#xff0c;强调低延迟和轻量级集成。基于本地模型或轻量级AI&a…...

第二次连接k8s平台注意事项

第二次重新打开集群平台 1.三台机子要在VMware打开 2.MobaBXterm连接Session 3.三个机子docker重启 systemctl restart docker4.主节点进行平台链接 docker pull kubeoperator/kubepi-server[rootnode1 home]# docker pull kubeoperator/kubepi-server [rootnode1 home]# # 运…...

Ruby Dir 类和方法详解

Ruby Dir 类和方法详解 引言 在Ruby编程语言中&#xff0c;Dir类是一个非常有用的工具&#xff0c;它允许我们与文件系统进行交互&#xff0c;如列出目录内容、检查文件是否存在等。Dir类提供了多种方法&#xff0c;使得文件系统的操作变得简单且高效。本文将详细介绍Ruby中的…...

Mybatis篇

1&#xff0c;什么是Mybatis &#xff08; 1 &#xff09;Mybatis 是一个半 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了 JDBC&#xff0c;开发时只需要关注 SQL 语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁…...

三维粒子滤波(Particle Filter)MATLAB例程,估计三维空间中匀速运动目标的位置(x, y, z),提供下载链接

三维粒子滤波(Particle Filter)MATLAB例程,估计三维空间中匀速运动目标的位置(x, y, z) 文章目录 介绍功能运行结果代码介绍 本 MATLAB 代码实现了三维粒子滤波( P a r t i c l e F i l t e...

WebAssembly:前后端开发的未来利器

引言 在互联网的世界里&#xff0c;前端和后端开发一直是两块重要的领域。而 JavaScript 长期以来是前端的霸主&#xff0c;后端则有各种语言诸如 Java、Python、Node.js、Go 等等。然而&#xff0c;近年来一个名为 WebAssembly (Wasm) 的技术正在逐渐改变这一格局。它的高性能…...

设计模式Python版 享元模式

文章目录 前言一、享元模式二、享元模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组合&…...

深入理解 YUV Planar 和色度二次采样 —— 视频处理的核心技术

深入理解 YUV Planar 和色度二次采样 —— 视频处理的核心技术 在现代视频处理和编码中,YUV 颜色空间和**色度二次采样(Chroma Subsampling)**是两个非常重要的概念。它们的结合不仅能够显著减少视频数据量,还能在保持较高视觉质量的同时优化存储和传输效率。而 YUV Plana…...

从0开始,来看看怎么去linux排查Java程序故障

一&#xff0c;前提准备 最基本前提&#xff1a;你需要有liunx环境&#xff0c;如果没有请参考其它文献在自己得到local建立一个虚拟机去进行测试。 有了虚拟机之后&#xff0c;你还需要安装jdk和配置环境变量 1. 安装JDK&#xff08;以OpenJDK 17为例&#xff09; 下载JDK…...

【MySQL】centos 7 忘记数据库密码

vim /etc/my.cnf文件&#xff1b; 在[mysqld]后添加skip-grant-tables&#xff08;登录时跳过权限检查&#xff09; 重启MySQL服务&#xff1a;sudo systemctl restart mysqld 登录mysql&#xff0c;输入mysql –uroot –p&#xff1b;直接回车&#xff08;Enter&#xff09; 输…...

区块链项目孵化与包装设计:从概念到市场的全流程指南

区块链技术的快速发展催生了大量创新项目&#xff0c;但如何将一个区块链项目从概念孵化成市场认可的产品&#xff0c;是许多团队面临的挑战。本文将从孵化策略、包装设计和市场落地三个维度&#xff0c;为你解析区块链项目成功的关键步骤。 一、区块链项目孵化的核心要素 明确…...

JavaScript基础入门(一):从零开始掌握网页互动与动态效果

JS基础&#xff08;一&#xff09; 目的&#xff1a;html是骨架&#xff0c;css是血和肉&#xff0c;js 就是灵魂 知识点一&#xff1a;JavaScript基本使用 网页的三剑客分别是&#xff1a;HTML、CSS、JS&#xff0c;我们把HTML当做毛坯房&#xff0c;CSS是房子的装修&#…...

20240824 美团 笔试

文章目录 1、单选题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、编程题2.12.2岗位:硬件开发工程师(嵌入式系统软件开发方向) 题型:20 道单选题,2 道编程题题 1、单选题 1.1 C 语言中,如果输入整数 v 是 2 的幂,下面表达式中哪个会返…...

css-根据不同后端返回值返回渲染不同的div样式以及公共组件设定

1.动态绑定 Vue: 使用计算属性 getClassName 来动态计算样式类名&#xff0c;并通过 :class 绑定到 div 元素上。 <template><div :class"getClassName">这是一个根据后端值动态设置样式的 div 元素。</div> </template><script> exp…...

【数据科学】一个强大的金融数据接口库:AKShare

文章目录 1. AKShare 简介2. 安装 AKShare3. AKShare 核心功能3.1 获取股票数据3.2 获取股票实时数据3.3 获取基金数据3.4 获取期货数据3.5 获取外汇数据3.6 获取数字货币数据 4. 数据处理与存储5. 实战案例6. 总结 AKShare 是一个开源的金融数据接口库&#xff0c;它提供了简单…...

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群

Ubuntu 22.04系统安装部署Kubernetes v1.29.13集群 简介Kubernetes 的工作流程概述Kubernetes v1.29.13 版本Ubuntu 22.04 系统安装部署 Kubernetes v1.29.13 集群 1 环境准备1.1 集群IP规划1.2 初始化步骤&#xff08;各个节点都需执行&#xff09;1.2.1 主机名与IP地址解析1.…...

如何开发一个大语言模型,开发流程及需要的专业知识

开发大型语言模型&#xff08;LLM&#xff09;是一个复杂且资源密集的过程&#xff0c;涉及多个阶段和跨学科知识。以下是详细的开发流程和所需专业知识指南&#xff1a; 一、开发流程 1. 需求分析与规划 目标定义&#xff1a;明确模型用途&#xff08;如对话、翻译、代码生成…...

10. 神经网络(二.多层神经网络模型)

多层神经网络&#xff08;Multi-Layer Neural Network&#xff09;&#xff0c;也称为深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;&#xff0c;是机器学习中一种重要的模型&#xff0c;能够通过多层次的非线性变换解决复杂的分类、回归和模式识别问题。以下…...

Windows 中学习Docker环境准备3、在Ubuntu中安装Docker

Windows 中学习Docker环境准备1、Win11安装Docker Desktop Windows 中学习Docker环境准备2、Docker Desktop中安装ubuntu Windows 中学习Docker环境准备3、在Ubuntu中安装Docker 需要更多Docker学习视频和资料&#xff0c;请文末联系 步骤 1&#xff1a;更新系统并安装依赖…...

Java项目: 基于SpringBoot+mybatis+maven+mysql实现的智能学习平台管理系(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql实现的智能学习平台管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、…...

把bootstrap5.3.3整合到wordpress主题中的方法

以下是将 Bootstrap 5.3.3 整合到 WordPress 主题中的方法&#xff1a; 下载 Bootstrap 文件&#xff1a;从 Bootstrap 官网下载最新的 5.3.3 版本的 CSS 和 JavaScript 文件。 上传文件到主题目录&#xff1a;将下载的 CSS 文件上传到 WordPress 主题文件夹中的 /css 文件夹…...

【Gitlab】虚拟机硬盘文件丢失,通过xx-flat.vmdk恢复方法

前言 由于近期过年回家&#xff0c;为了用电安全直接手动关闭了所有的电源&#xff0c;导致年后回来商上电开机后exsi上的虚拟机出现了问题。显示我的gitlab虚拟机异常。 恢复 开机之后虚拟机异常&#xff0c;通过磁盘浏览发现gitlab服务器下面的虚拟机磁盘文件只有一个xxx-f…...

GC日志的解读

GC日志的解读 gc日志的解读 gc日志的解读...

Shell基础:中括号的使用

在Shell脚本中&#xff0c;中括号&#xff08;[ ... ] 和 [[ ... ]]&#xff09;是一种常见的条件测试结构。它们用于进行文件类型检查、值比较以及逻辑判断。通过了解它们的不同特点和用法&#xff0c;能够帮助你编写更加高效、安全且易读的脚本。本文将详细介绍Shell中单中括…...

结构体排序 C++ 蓝桥杯

成绩排序 #include<iostream> #include<algorithm> using namespace std; struct stu {string name;//名字int grade;//成绩 }; stu a[30]; bool cmp(stu l, stu r) {if (l.grade ! r.grade) return l.grade > r.grade;return l.name < r.name; } int main()…...