MySQL之索引结构

这篇具有很好参考价值的文章主要介绍了MySQL之索引结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

索引概述

索引是帮助MySQL高效获取数据数据结构(有序)。

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

下图演示有索引和无索引的区别:

MySQL之索引结构,mysql,数据库

备注:上述二叉树索引结构的只是一个示意图,并不是真实的索引结构

优缺点

优势:

1、提高数据检索的效率,降低数据库的I/O成本。

2、通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。

劣势(基本忽略):

1、索引列也是要占用空间的(但是现在磁盘很便宜)

2、索引大大提高了查询效率,同时也降低了更新表的速度,如对表进行插入、删除、更新时,效率降低。

索引结构

MYSQL的索引是在存储引擎层实现的,不同的存储引擎有不同的索引结构主要包含以下几种:

索引结构

描述

B+Tree索引 最常见的索引类型,大部分引擎都支持B+树索引
Hash索引 底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才生效,不支持范围查询
R-tree(空间索引) 空间索引是MYISAM引擎的一个特殊索引类型,用于地理空间数据类型,通常使用比较少
Full-text(全文索引) 是一种通过建立倒排索引,快速匹配文档的方式

MySQL之索引结构,mysql,数据库

B+Tree索引

二叉树

左边的节点的值比父节点值小,右边节点的值比父节点值大

MySQL之索引结构,mysql,数据库

二叉树缺点:顺序插入时,会形成一个链表,查询性能大大降低。在大多数情况下层级较深检索速度慢。

红黑二叉树(自平衡二叉搜索树)

红黑树是一种高效的自平衡二叉查找树,用于存储有序的数据,并在插入和删除操作时能够快速地进行调整以保持其性质。

MySQL之索引结构,mysql,数据库

B-Tree树(多路平衡查找树)

以一颗最大数(max-degree)为5(5阶)的b-tree为例(每个节点最多存储4个key,5个指针)

注意:树的度数指的是一个节点的子节点个数。

插入:100 65 169 368 900 556 780 35 215 1200 134 888 158 90 1000 88 120 268 250

MySQL之索引结构,mysql,数据库

具体动态变化过程参考网站:https://www.cs.usfca.edu/~galles/visualization/BTree.html

B+Tree树

插入:100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250

MySQL之索引结构,mysql,数据库

动态变化过程参考网站:https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

相较于B-Tree区别:

1、所有数据都会出现在叶子节点

2、叶子节点形成一个单向链表

MySQL中B+Tree树

MYSQL索引数据结构对经典的B+Tree树进行了优化。在原B-Tree的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的B+Tree,提高了访问性能。

MySQL之索引结构,mysql,数据库

Hash索引

哈希索引就是采用一定的哈希算法,将键值换算成对应的哈希值,映射到对应的槽位上,然后存储在哈希表中。

如果两个(或多个)键值,映射到一个相同的槽位上,他们就会产生哈希冲突(也称哈希碰撞),可以通过链表来解决。

MySQL之索引结构,mysql,数据库

哈希索引特点

1、哈希索引只能用于对等比较(=,in),不支持范围查询(between,>,<)

2、无法利用索引完成排序操作

3、查询效率高,通常只需要一次检索就可以了,效率高于B+Tree索引

存储引擎支持

在MySQL中,支持hash索引的是MEMORY引擎,而InnoDB中具有自适应的哈希功能,哈希索引是存储引擎根据B+Tree索引在指定条件下自动构建的。

面试题:为什么InnoDB存储引擎选择使用B+Tree索引结构?

1、相较于二叉树,层级更少,搜索效率高;

2、对于b-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针也跟着减少,要同样保存大量数据,只能增加树的高度,导致性能下降;

3、相较于哈希索引,B+Tree支持范围匹配和排序操作文章来源地址https://www.toymoban.com/news/detail-815242.html

到了这里,关于MySQL之索引结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库:索引

            索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。         相当于是给数据库中的数据建立了一个目录,通过目录可以知道数据所在位置,然后到指定位置

    2023年04月17日
    浏览(80)
  • 【MySql】数据库索引

    可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查找字段设置索引; 2、在创建表时侯,使用 index 进行普通索引的声明 3、修改表结构,给指定的字段添加索引 alter table 表名 add index 索引名

    2024年02月03日
    浏览(65)
  • MySQL数据库索引机制

    MySQL是一款有客户端和服务端的网络应用,mysql是它的客户端,mysqld是它的服务端。服务端本质就是一个进程,它存在于内存当中。而我们存储在MySQL中的数据是保存在磁盘上的,当我们对MySQL中数据进行增删查改操作时,不可能是直接在磁盘上进行操作,而是将对应的数据加

    2024年02月12日
    浏览(78)
  • MySQL数据库唯一索引

    创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有3种方式,分别是1.创建表的时候创建索引、2.在已经存在的表上创建索引和使用3.ALTER TABLE语句来创建索引。 本文福利, 莬 费领取Qt开发学习资料包、技术视频,内容包括(C++语言基

    2024年02月08日
    浏览(67)
  • 简单认识MySQL数据库索引

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来定位某行的

    2024年02月16日
    浏览(69)
  • 【MySql系列】深入解析数据库索引

    MySQL索引是数据库中一个关键的概念,它可以极大地提高查询性能,加快数据检索速度。但是,要充分发挥索引的作用,需要深入理解它们的工作原理和使用方式。 在本文中,我们将深入解析MySQL索引,探讨它们的重要性、类型、创建、维护以及最佳实践。 在数据库中,索引

    2024年02月08日
    浏览(76)
  • 【Mysql系列】——详细剖析数据库“索引”【上篇】

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法,数据库等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮

    2024年02月02日
    浏览(57)
  • MySQL数据库索引的种类、创建、删除

    目录 一:MySQL 索引 1、MySQL 索引介绍 2、 索引的作用  3、索引的副作用 4、 创建索引的原则依据  二、索引的分类和创建 1、 普通索引 (1) 直接创建索引 (2) 修改表方式创建 (3) 创建表的时候指定索引 2、 唯一索引 (1) 直接创建唯一索引 (2) 修改表方式创建

    2024年02月09日
    浏览(214)
  • MySQL数据库的ID列添加索引

    要为MySQL数据库的ID列添加索引,可以使用以下语法: 其中, table_name 是要添加索引的表名, index_name 是索引的名称, id 是要添加索引的列名。 例如,如果要为名为 users 的表的 id 列添加索引,可以执行以下语句: 这将在 users 表的 id 列上创建名为 idx_id 的索引。 需要注意的

    2024年02月07日
    浏览(53)
  • B+树:MySQL数据库索引的实现

    作为一个软件开发工程师,你对数据库肯定再熟悉不过了。作为主流的数据存储系统,它在我们的业务开发中,有着举足轻重的地位。在工作中,为了加速数据库中数据的查找速度,我们常用的处理思路是,对表中数据创建索引。那你是否思考过,数据库索引是如何实现的呢

    2024年02月09日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包