【MySQL】索引概念解析

1.什么是索引?

MySQL中的索引是一种数据结构,用于帮助MySQL数据库管理系统快速查询数据。索引的主要目的是提高数据检索的速度,减少数据库系统需要扫描的数据量。

优点:

  1. 索引可以极大的提高数据检索效率,降低数据库IO成本
  2. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  3. 通过索引列对数据进行排序,降低数据排序的成本,减少CPU的消耗

缺点:

  1. 创建索引需要消耗物理空间。对于大型数据库,索引可能会占用相当大的磁盘空间。
  2. 创建索引和维护索引需要消耗时间,降低表的更新效率。对表中数据进行增删改操作时,那么索引也需要动态的修改,会降低 SQL 执行效率。

适用场景:

  1. 具有唯一性约束的字段,比如商品编码,可以适用唯一性索引
  2. 频繁使用的列,如主键、外键
  3. 经常用于WHERE查询条件的字段,如果查询条件不是⼀个字段,可以建⽴联合索引。
  4. 用于GROUP BYORDER BY中的字段,由于索引基于B+树实现,会自动维护数据的有序性,降低数据排序的成本。

不适用场景:

  1. WHEREGROUP BYORDER BY用不到的字段,索引的作用是快速定位,用不到的话会额外占用空间

  2. 存在大量重复元素的字段,如性别,无论怎么搜索可能只会得到一半的数据。

  3. 表数据太少的时候,无需创建索引。

  4. 频繁修改的列,当对表中数据进行增删改操作时,由于索引需要维护B+树的有序性,会频繁的创建索引,影响数据库的性能。

2.索引结构选型

B+ 树非常适合作为数据库索引结构,特别是在处理大量数据的场景下,能够提供高效的查询、插入和删除操作,并且支持范围查询和顺序扫描。这些特性使得 B+ 树成为 MySQL 等数据库系统中首选的索引数据结构。

下面将针对不同的数据结构进行分析,以说明B+树为何能在众多数据结构中脱颖而出。

Hash表

MySQL 的 InnoDB 存储引擎不直接支持常规哈希索引,但有一种自适应哈希索引(Adaptive Hash Index)。这种索引结合了 B+ 树和哈希索引的特点,适应实际数据访问模式和性能需求。自适应哈希索引的每个哈希桶实际上是一个小型的 B+ 树结构,存储多个键值对,减少了哈希冲突,提高了效率。

MySQL 没有采用哈希索引作为主要索引结构,主要因为哈希索引不支持顺序和范围查询。此外,每次 IO 只能取一个值,限制了查询性能。

二叉查找树(BST)

二叉查找树的性能非常依赖于它的平衡程度。

  • 平衡时:查询时间复杂度为 O(log N),效率较高。
  • 不平衡时:最坏情况下退化为线性链表,查询效率降至 O(N)。

AVL树

AVL 树是一种高度平衡二叉树,保证任何节点的左右子树高度之差不超过 1,查找、插入和删除的时间复杂度均为 O(log N)。AVL 树通过四种旋转操作(LL、RR、LR、RL)保持平衡,但频繁的旋转操作增加了计算开销,降低了数据库写操作的性能。

每个 AVL 树节点仅存储一个数据,每次磁盘 IO 只能读取一个节点的数据,需要多次 IO 查询多个节点的数据,影响了性能。

红黑树

红黑树是一种自平衡二叉查找树,通过颜色变换和旋转操作保持平衡,具有以下特点:

  1. 每个节点非红即黑;
  2. 根节点总是黑色;
  3. 每个叶子节点是黑色的空节点(NIL);
  4. 红色节点的子节点必须是黑色;
  5. 从任意节点到叶子节点的每条路径包含相同数量的黑色节点。

红黑树追求的是大致平衡,查询效率略低于 AVL 树,因为红黑树的平衡性较弱,可能导致树的高度较高,需要多次磁盘 IO 操作。这也是 MySQL 没有选择红黑树的原因之一。但红黑树的插入和删除操作效率高,因为只需进行 O(1) 次数的旋转和变色操作,保持基本平衡状态。

红黑树广泛应用于 TreeMap、TreeSet 和 JDK1.8 的 HashMap 底层,在内存中的表现非常优异。

B树&B+树

B 树也称 B-树,全称为 多路平衡查找树 ,B+ 树是 B 树的一种变体。B 树和B+ 树中的 B 是 Balanced (平衡)的意思。

目前大部分数据库系统及文件系统都采用 B-Tree 或其变种 B+Tree 作为索引结构。

B 树&B+ 树两者有何异同呢?

  1. 存储方式不同

B 树的所有节点既存放键(key)也存放数据(data),而B+树只有叶子节点存放 key 和 data,非叶子节点只存放 key。

  1. 单点查询稳定性不同

B 树的查询波动较大,因为每个节点既存放索引又存放记录,有时访问到非叶子节点就能找到数据,有时需要访问叶子节点才能找到。

B+ 树的非叶子节点仅存放索引,因此可以存放更多的索引,使得 B+ 树比 B 树更「矮胖」,查询底层节点的磁盘 I/O 次数更少。

  1. 插入和删除效率不同
  • 在B树中,当内部节点需要删除或插入时,可能会涉及到多个子节点的调整。由于B树的非叶子节点也存储数据,因此分裂或合并操作需要确保数据的完整性和树的平衡。
  • 相比之下,B+树的非叶子节点只存储键信息,不存储实际的数据。因此,在分裂或合并非叶子节点时,只需要处理键信息,这使得操作相对简单且高效。并且,B+树的叶子节点包含所有实际的数据,并且它们之间通过指针相连。这使得在删除节点时,可以更容易地重新组织数据以保持树的平衡。
  1. 范围查询效率不同

B+ 树支持范围查询。进行范围查找时,从根节点遍历到叶子节点即可,因为数据都存储在叶子节点上,且叶子节点通过指针连接,便于范围查找。

3.索引的类型

按照底层存储方式角度划分:

  • 聚簇索引(聚集索引):索引结构和数据一起存放的索引,只有InnoDB 中的主键索引属于聚簇索引
  • 非聚簇索引(非聚集索引):索引结构和数据分开存放的索引,二级索引(辅助索引)就属于非聚簇索引。MySQL 的 MyISAM 引擎,不管主键还是非主键,使用的都是非聚簇索引。

按照应用维度划分:

主键索引

加速查询 + 列值唯一 + 不可以有NULL + 表中只有一个。

CREATE TABLE tb_user (id INT PRIMARY KEY,name VARCHAR(50)
);

普通索引

加速查询 + 列值可以重复 + 可以有NULL。

CREATE INDEX idx_name ON tb_user(name);

唯一索引

加速查询 + 列值唯一 + 可以有NULL。

CREATE UNIQUE INDEX idx_email ON tb_user(email);

联合索引

多个列组成一个索引,专门用于组合搜索,其效率大于多个单列索引的合并效率。

CREATE INDEX idx_cover ON tb_user(name, email);

覆盖索引

一个索引包含所有需要查询的字段的值。

CREATE INDEX idx_cover ON tb_user(name, email);SELECT name, email FROM tb_user WHERE name = 'John';

全文索引

对文本的内容进行分词,进行搜索。目前只有 CHARVARCHARTEXT 列上可以创建全文索引。一般不会使用,效率较低,通常使用搜索引擎如 ElasticSearch 代替。

CREATE TABLE articles (id INT PRIMARY KEY,title VARCHAR(200),content TEXT,FULLTEXT (title, content)
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/392879.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——预处理和指针

C语言——预处理和指针 预处理宏宏定义宏的作用域带参的宏 文件包含条件编译 指针指针的概念指针的定义 预处理 编程的流程分为:编辑、编译、运行、调试四个阶段; 预处理属于编译阶段,编译过程又可以分为:预处理、编译、汇编、链…

TikTok达人效应:品牌出海中的文化桥梁与本土化策略

在全球化的浪潮下,品牌出海已成为企业拓展市场的必经之路。然而,跨越文化差异、实现品牌本土化传播一直是企业面临的巨大挑战。TikTok作为一款全球流行的短视频平台,其庞大的用户基础和强大的影响力,为品牌出海提供了新的机遇。在…

大数据技术复习--大数据与云计算、物联网、人工智能

云计算 ** 概念:美国国家标准技术研究院“一种无处不在的、便捷的且按需的对一个共享的可配置的计算资源(如网络,服务器、存储、应用和服务)进行网络访问的模式,他能够通过少量的管理或服务供应商的互动实现计算资源的…

CTFHub技能树web——XSS——DOM反射

根据框里的内容 直接右键查看网页源代码 看到 了其闭合方式 然后去网页测试一下alert&#xff08;1&#xff09;反射 ;</script><script>alert(1)</script> 看到 确实存在 去xssaq.cn 创建一个项目 把src粘过来 在第一个输入框中 再将返回回来的url 复…

MATLAB计算心理声学烦恼度例子

在这个例子中&#xff0c;您测量发动机噪音&#xff0c;并使用心理声学指标来模拟其感知响度、尖锐度、波动强度、粗糙度和总体烦扰程度。然后&#xff0c;模拟添加隔音材料&#xff0c;重新计算总体噪音水平。最后&#xff0c;比较恼人程度&#xff0c;并显示应用隔音材料后的…

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三&#xff08;在不同VI中用同一个通知器&#xff09; 通知器 同步技术&#xff1a;同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作&#xff0c;类似于广播&#xff0c;一点发出的通知消息&#xff0c; 其它…

Spring Boot 3.3 新特性介绍

1. 引言 Spring Boot 3.1.x 停止维护了&#xff0c;而 3.3.x 作为最新发布的版本&#xff0c;带来了许多新特性和改进。本篇文章将详细介绍这些新特性&#xff0c;并通过样例代码加以解释&#xff0c;帮助开发者更好地掌握和应用这些新功能。 Spring Boot 3.3现已正式发布&…

Android studio配置代码模版

一、背景&#xff1a; 在工作中&#xff0c;总是要写一些重复的代码&#xff0c;特别是项目有相关规范时&#xff0c;就会产生很多模版代码&#xff0c;每次要么复制一份&#xff0c;要么重新写一份新的&#xff0c;很麻烦&#xff0c;于是我就在想&#xff0c;能不能像创建一…

小程序开发入门:第一天的学习和实践指南

目录 一. 理解小程序的基本概念 1. 无需安装 2. 快速启动 3. 界面简洁 4. 独立性和封闭性 5. 数据安全 6. 框架结构 7. 生命周期 8. 全局配置 9. API支持 10. 发布和更新 二、选择合适的开发工具 1. 微信开发者工具 2. Visual Studio Code 3. Sublime Text 4. …

Tensor安装和测试

1: 打开git官方 https://github.com/NVIDIA/TensorRT 2: 下载得到&#xff1a;TensorRT-10.2.0.19.Linux.x86_64-gnu.cuda-11.8.tar.gz 3: 下载后配置环境变量&#xff0c;上面地址记得改成真实地址。 4: 如果想python使用tensorrt&#xff0c;那么 解压后目录&#xff0c…

【HTML入门】第二十三课 - 【实战】做一个简单的图书详情页

这一节&#xff0c;我们继续用纯HTML来做一个实战小案例。 我找了一个图书详情的页面&#xff0c;就像这样&#xff1a; 这一小节&#xff0c;我们用纯HTML标签&#xff0c;来实现一下这个图书详情的内容。 目录 1 布局分析 2 用到的标签 3 实战代码 1 布局分析 我们看这张…

吴恩达机器学习-C1W3L2-逻辑回归之S型函数

可选实验:逻辑回归 在这个不评分的实验中&#xff0c;你会 探索sigmoid函数(也称为logistic函数)探索逻辑回归;哪个用到了s型函数 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_one_addpt_onclick import plt_one_addpt_onclick from l…

Flutter 插件之http(介绍、使用、二次封装)

背景 在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是: 1、dio 2、http 其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。 http…

如何申请一年期IP地址SSL证书

在数字化的时代&#xff0c;网络安全越来越重要&#xff0c;SSL证书已经成为网站的标配&#xff0c;它承担着保护网站安全的重大作用。一般申请SSL证书都是用域名来申请的&#xff0c;不过当没有域名或者域名无法使用时&#xff0c;就需要使用IP地址来申请SSL证书了&#xff0c…

Cursor搭配cmake实现C++程序的编译、运行和调试

Cursor搭配cmake实现C程序的编译、运行和调试 Cursor是一个开源的AI编程编辑器&#xff0c;开源地址https://github.com/getcursor/cursor &#xff0c;它其实是一个集成了Chat-GPT的VS Code。 关于VS Code和VS的对比可以参考这篇文章VS Code 和 Visual Studio 哪个更好&…

等保测评中的访问控制与用户认证:构建安全的访问管理机制

在当今数字化时代&#xff0c;信息安全已成为企业和组织不可忽视的关键议题。等保测评&#xff0c;作为我国信息安全等级保护制度的重要组成部分&#xff0c;对访问控制与用户认证提出了严格要求&#xff0c;旨在构建安全的访问管理机制&#xff0c;保护信息资产不受未授权访问…

怎么写进修总结汇报ppt?有这3个AI软件做PPT再也没烦恼!

在当今瞬息万变的职场环境中&#xff0c;持续学习和自我提升已不再是一种选择&#xff0c;而是生存和发展的必需。作为一种系统化的学习方式&#xff0c;进修为职场人士提供了宝贵的机会来更新知识储备、提升专业技能&#xff0c;并拓展职业视野。当然&#xff0c;进修的价值不…

Dreamweaver (DW)2021 下载 安装

将 Dreamweaver 2021 压缩包解压到本地&#xff1a; 点击蓝色字体下载压缩包 提取码 ixsu 鼠标右键 点击 Set-up 选择 以管理员身份运行&#xff1a; 点击 更改位置 可以自定义选择安装路径 也可以选择默认位置 点击 继续&#xff1a; 等待安装 正常等待5分钟左右&#xff1…

12月长沙学术会议:EI检索,机器人、自动化与智能控制方向

在春意盎然、生机勃勃的四月&#xff0c;全球科技界的目光聚焦于中国长沙&#xff0c;这里即将迎来一场科技与智慧碰撞的盛宴——第四届机器人、自动化与智能控制国际会议&#xff08;ICRAIC 2024&#xff09;。本次盛会由历史悠久、文化底蕴深厚的湖南第一师范学院荣耀主办&am…

电话营销机器人革新电销行业

第一&#xff0c;减少企业各方面的支出 企业需要各方面的支出。例如&#xff0c;招聘成本和管理成本、员工薪资和社保都是非常大的支出。但AI智能电销机器人&#xff0c;只要购买费用和电话费的一小部分&#xff0c;就没有更多的费用。经计算&#xff0c;该机器人的成本仅相当于…