*MYSQL--索引--内部原理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: *MYSQL--索引--内部原理

MYSQL的索引根据功能,主要有三大类型:

1.HASH索引

2.二叉树

3.BTREE索引


一:HASH索引

1.内部原理:

在设置了某列为索引列之后,并且开始或者将要在相应索引列创建数据的时候,系统通过某种算法  F(X) 自动计算出来一个十六进制的哈希值,这个哈希值能够对应相应的字段值   所以,在之后如果使用HASH查询的时候,可以直接通过计算索引值在刚开始创建时所得的哈希值,通过这个哈希值再对应相应的索引值,达到直接搜索的目的,而不是再全表搜索,大大提高了搜索效率

2.优点:

       通过字段值计算出相应的HASH值,定位数据,搜索数据非常的快,但是也要注意一点,不同的字段时可能够有相同的哈希值的,即一个哈希值可能够对应了多个字段,这被称为哈希冲突,但即使如此也大大缩小了查找的范围,一定程度上也提高了查找的效率

3.缺点:

       没有办法进行范围查找,因为通过哈希值进行查找所得的都是具体的结果,并且其中的值都是无序的,无法进行大小的比较


二:二叉树

1.内部原理:

类似于树的形状,最上面是根节点,每一个节点最多只有两个分叉,往左为左子树,右边是右子树,同样的,往左边的一个点,或者是往右边的也是一个根节点,根节点往左均为左子树,往右均为右子树.

2.优点:

       了解了左子树与右子树的概念之后,对与跟节点来说,其左子树都是小于它的数字,右边的数都是大于它的数字.从而使得查询速度更快一些

3.缺点:

  1>因为这种特性,也可能会出现一些其他的情况,比如类似于链接的结构,从1-->2-->3...  这种特殊的不平衡,会使得其查询跟平常的全表查询相当,并没有用到二叉树查询

   2>同样的,这种二叉树查询也无法进行范围性的查询,需要回旋,反复的进行寻找,所以无法进行范围查询

三:BTREE

BTREE查询有两种,分别是:B-TREE  以及B+TREE两种

       1.B-TREE:

 可以先设置节点的多少,比方说MAX.DEGREE=3的时候,就代表一个节点最多只能够有2个数据,如果再多会将中间的值 向上提取 出来,再添加数据,根据数据的大小,再进行重复的操作,从而形成一个类似于树的形状

     (图为以3为最大节点的B-TREE图像)

       2.B+TREE:

 B+TREE索引实际上跟B-TREE索引的大概原理是一样的,但是有一点,B+TREE索引在使用的时候,比如说设置节点最大值为3,插入0001,0002,再进行插入的时候,会将中间的'映射',向上提取出来,而操作原本的数据,并不将原本的数据向上提取,而是提取了'映射'.

    (图为以3为最大节点的B+TREE图像)

       TIPS:值得注意的一点是,通过这一保存原本数据的特性,我们就能够使用B+TREE索引进行范围查找了,也大大节省了磁盘扫描的时间


四.BTREE索引对于存储引擎的应用:

       1.MylSAM存储引擎:

  MylSAM存储引擎使用的是:B+TREE索引,例如,查询某个具体的值的时候,MylSAM先看索引列的值,根据指针判断其大小,之后再向下,左子树或者是右子树进行寻找,直到查询到某个需要的叶节点,叶节点的DATA存放的是数据记录的一个地址值,之后再通过地址值进行寻找,获得相应的结果


       2.InnoDB引擎:

    依旧是根据B+TREE建立的引擎,大部分跟MYLSQM有些不一样的一点就是,

   InnoDB的叶节点的DATA存储的是数据!!!而不再是一个地址值,也就是说可以直接得到相应的值,索引效率要比MYLSAM高一些,但是直接对于地址值的存放,也使得比较'吃'硬盘内存的大小.

                                                               OVER!感谢观看

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
100 4
|
5月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
7月前
|
关系型数据库 MySQL 数据库
Mysql的索引
MYSQL索引主要有 : 单列索引 , 组合索引和空间索引 , 用的比较多的就是单列索引和组合索引 , 空间索引我这边没有用到过 单列索引 : 在MYSQL数据库表的某一列上面创建的索引叫单列索引 , 单列索引又分为 ● 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。 ● 唯一索引:索引列中的值必须是唯一的,但是允许为空值 ● 主键索引:是一种特殊的唯一索引,不允许有空值 ● 全文索引: 只有在MyISAM引擎、InnoDB(5.6以后)上才能使⽤用,而且只能在CHAR,VARCHAR,TEXT类型字段上使⽤用全⽂文索引。
|
3月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
|
3月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
4月前
|
存储 关系型数据库 MySQL
MySQL覆盖索引解释
总之,覆盖索引就像是图书馆中那些使得搜索变得极为迅速和简单的工具,一旦正确使用,就会让你的数据库查询飞快而轻便。让数据检索就像是读者在图书目录中以最快速度找到所需信息一样简便。这样的效率和速度,让覆盖索引成为数据库优化师傅们手中的尚方宝剑,既能够提升性能,又能够保持系统的整洁高效。
124 9
|
5月前
|
机器学习/深度学习 关系型数据库 MySQL
对比MySQL全文索引与常规索引的互异性
现在,你或许明白了这两种索引的差异,但任何技术决策都不应仅仅基于理论之上。你可以创建你的数据库实验环境,尝试不同类型的索引,看看它们如何影响性能,感受它们真实的力量。只有这样,你才能熟悉它们,掌握什么时候使用全文索引,什么时候使用常规索引,以适应复杂多变的业务需求。
110 12
|
6月前
|
SQL 存储 关系型数据库
MySQL选错索引了怎么办?
本文探讨了MySQL中因索引选择不当导致查询性能下降的问题。通过创建包含10万行数据的表并插入数据,分析了一条简单SQL语句在不同场景下的执行情况。实验表明,当数据频繁更新时,MySQL可能因统计信息不准确而选错索引,导致全表扫描。文章深入解析了优化器判断扫描行数的机制,指出基数统计误差是主要原因,并提供了通过`analyze table`重新统计索引信息的解决方法。
138 3
|
7月前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。

推荐镜像

更多