【Mysql系列】——详细剖析数据库“索引”【上篇】

这篇具有很好参考价值的文章主要介绍了【Mysql系列】——详细剖析数据库“索引”【上篇】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法,数据库等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!😘我仅已此文,和大家分享【【Mysql系列】——详细剖析数据库“索引”【上篇】~都是精华内容,可不要错过哟!!!😍😍😍

索引

索引概述

   在数据之外,数据库系统还维护着满足查找算法的数据结构,这些数据结构以某种方式指向我们的数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。简单来说,索引是帮助Mysql高效获取数据的数据结构(有序)
说到数据结构,大家可能一想到B+树、红黑树、二叉树等等各种各样的树就感到头疼。
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java
其实不用那么慌张,我们只需要了解其结构和一些基本性质就行了。

为什么需要索引?

前面我们已经提到了,索引是一种数据结构,它能够帮助数据库快速查询数据,这就是它的主要作用。当没有索引的时候,我们在查询数据时,就像下面这幅图一样进行全表扫描,这样效率是非常低下的。
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java
通常来说,一般提到数据库的索引时,其数据结构都是B+树数据结构。下面这幅图是一个大概展示了索引查找数据的画面,并非真正的B+树。
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

索引的优缺点

优势 劣势
提高数据检查的效率,降低数据库的IO成本 索引也是要占用空间的
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行的 insert、update、delete时,效率降低。
  • 但是,现在的磁盘是很便宜的,所以索引占空间的问题就没有那么重要了。
  • 其实在一个正常的业务中,进行增删改的操作远小于查询操作。所以索引的第二个不足也影响不大。
  • 根据场景需求和业务需求选择是否使用索引。

索引结构

前面的博客已经提到过,索引是在存储引擎层实现的不同的存储引擎有着不同的结构,主要包括一下几种:
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java
默认索引都是B+树,面试的时候一般没有说明也是B+树索引结构
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

索引的结构为什么不是二叉树和红黑树?

【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

索引的B+树结构

【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java
上面都是数据结构中的B+数结构,而在Mysql中,是对其进行优化的。在原B+Tree的基础上,增加了一个指向相邻叶子结点的链表指针,就形成了带有顺序指针的B+Tree,提高区间访问性能
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

索引的Hash结构

哈希表就是采用一定的Hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。如果两个或者多个键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为是hash碰撞),可以通过链表来解决这个问题。
【Mysql系列】——详细剖析数据库“索引”【上篇】,Mysql【进阶版】,数据库,mysql,java

Hash结构索引的特点

  1. Hash索引只能用于对等比较( = , in),不支持范围查询(between,>,<,…)
  2. 无法利用索引完成排序操作。我们可以看到,数据在hash表中的存储是无序的。
  3. 查询效率高,通常只需要一次检索就可以了,效率通常要高于B+Tree索引。这里之所以说是通常而不是一定,是因为在可能会发生hash冲突

注意:在Mysql中,支持hash索引的是Memory引擎,而INnoDB中具有自适应的hash功能,hash索引是存储引擎根据B+Tree索引在指定条件下自动构建的。

思考:为什么InnoDB存储引擎选择使用B+Tree索引结构呢?

理由有以下几点:

  • 相对于二叉树,层级更少,搜索效率更高;
  • 对于B-树,无论是叶子结点还是非叶子节点,都会保存数据,这样导致了一页中存储的键值减少,指针跟着减少(键值key 的个数比指针数少1),要同样保存大量的数据,只能增加树的高度,导致性能的降低;
  • 相对于Hash索引,B+Tree支持范围匹配和排序操作的。而Hash索引不能。

总结撒花💞

   本篇文章旨在分享【Mysql系列】——详细剖析数据库“索引”【上篇】。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘文章来源地址https://www.toymoban.com/news/detail-783320.html

到了这里,关于【Mysql系列】——详细剖析数据库“索引”【上篇】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 进阶数据库系列(十二):PostgreSQL 索引技术详解

    前面介绍了 PostgreSQL 数据类型和运算符、常用函数、锁操作、执行计划、视图与触发器、存储过程相关的知识点,今天将为大家介绍 PostgreSQL 索引 相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!! 索引主要被用来提升数据库性能,不当的使

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

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

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

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

    2024年02月08日
    浏览(67)
  • MySQL数据库索引的数据结构

    数据库索引的功能就是让查找更加的高效,所以索引的数据结构应该是能够加速查找的数据结构。 MySQL的innoDB存储引擎的索引的数据结构就是多叉搜索树中的b+树,这可以说是为索引量身定做的一个数据结构。 首先,索引可以通过主键,unique修饰创建,也可以直接使用sql语句

    2024年02月10日
    浏览(58)
  • GaussDB云数据库SQL应用系列—索引管理

    目录 一、前言 二、注意事项 三、索引创建 1、创建普通索引 2、创建唯一索引 3、创建多字段索引 4、创建部分索引 5、创建表达式索引 四、索引管理 1、查看索引信息 2、删除索引 总结 随着互联网的快速发展,数据量呈现爆炸式增长。如何高效地管理和查询这些数据成为了

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

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

    2024年02月16日
    浏览(69)
  • 【MySQL数据库 | 第十七篇】索引以及索引结构介绍

    目录 前言: 索引简介:  索引结构:           二叉树索引结构         Tree(普通二叉树)         B-Tree(多路平衡查找树)         B+Tree          哈希索引数据结构 总结: 在实际生活中,我们对SQL语句进行优化实际上有很大一部分都是对索引进行优化,因此对索引

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

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

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

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

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

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

    2024年02月09日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包