目的:通过mysql获取数据,检索数据的原理来理解索引,以及如何利用好索引。

由于篇幅问题,可能会连载几篇文章。

从mysql获取一条数据说起:

我们知道,电脑的系统在获取数据的时候会旋转磁盘,然后移动磁头,然后将盘片对应部分的数据取出。

但mysql的数据在磁盘中的位置可能不一定是连续,这样进行一次访问可能花费的开销比我们想想的要大很多,

所以我们想要提高查找速度,就一定要找一个其他方法提高检索速度(索引)。

正常索引结构都会有很多种:B-tree,Hash,位图索引等等。

前提说明:图中每个圆代表索引的1块内存区域。所以每访问一个圆(索引节点)都会产生一次IO。

因此产生的弊端:在磁头达到目标数据之前,每经过一个节点,都要产生一次IO,所以数据量增大时,节点的数量会逐渐增加。

就会使得IO次数增加。

红黑树在查找方面有所改观,每增加一个节点的同时,会经过一次平衡算法,将节点尽量分散开,

尽可能的减小红黑树的单边过于冗长。但随着数据量的增加也一样会使IO次数增加。

为了解决这个问题:mysql推出了优于前两种的(没有绝对的优)B+tree。

为了减少IO次数,mysql将一个Index的内存区域扩大成可以容纳n个根节点的大小(橘黄色区域)。

就是我们所熟知的B+Tree。

MySql索引底层原理(01)的更多相关文章

  1. 深入理解 MySQL 索引底层原理

    https://mp.weixin.qq.com/s/qHJiTjpvDikFcdl9SRL97Q

  2. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

  3. 【转】由浅入深探究mysql索引结构原理、性能分析与优化

    摘要: 第一部分:基础知识 第二部分:MYISAM和INNODB索引结构 1.简单介绍B-tree B+ tree树 2.MyisAM索引结构 3.Annode索引结构 4.MyisAM索引与Inno ...

  4. 重新学习MySQL数据库4:Mysql索引实现原理

    重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主 ...

  5. MySQL索引的原理,B+树、聚集索引和二级索引

    MySQL索引的原理,B+树.聚集索引和二级索引的结构分析 一.索引类型 1.1 B树 1.2 B+树 1.3 哈希索引 1.4 聚集索引(clusterd index) 1.5 二级索引(secon ...

  6. MySQL索引底层实现原理

    优秀博文: MySQL索引背后的数据结构及算法原理 B树.B-树.B+树.B*树[转],mysql索引 MySQL 和 B 树的那些事 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮 ...

  7. 007 --MySQL索引底层实现原理

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希望查 ...

  8. MySQL索引底层数据结构

    一.何为索引? 1.索引是帮助数据库高效获取数据的排好序的数据结构. 2.索引存储在文件中. 3.索引建多了会影响增删改效率. (下面这张图为计算机组成原理内容,每查询一次索引节点,都会进行一次磁盘I ...

  9. 深入理解MySQL索引底层数据结构

    作者:IT王小二 博客:https://itwxe.com MySQL 索引相关的数据结构有两种,一种是 B+tree,一种是 Hash,那么为什么在 99.99% 的情况下都使用的是 B+tree索 ...

  10. mysql join 底层原理

    你知道 Sql 中 left join 的底层原理吗? 2019-09-10阅读 7130 https://cloud.tencent.com/developer/column/2367   01.前 ...

随机推荐

  1. CF335F Buy One, Get One Free

    \(\text{Solution}\) 其实不想写(因为不好写... 所以贴贴 \(\text{Solution}\) 然而就关于这题而言讲得也不太清楚 可撤销贪心就是维护当前状态的最优解,同时考虑以 ...

  2. [NOI Online 提高组]冒泡排序

    题目 洛谷等许多 \(OJ\) 都有 思路 考试题,今日无意又做了一次 然后发现自己读错题了······ 其实询问时只要 \(k\) 轮排序后的逆序对个数并不需要真的对序列进行更改 很显然 \(k\) ...

  3. git添加多账户(附带tortoiseGit多账号使用)

    近期想在公司电脑上开发自己项目,但是电脑上已经配置过一个gitlab账户了,现在想要把自己的git账户也加进来,方便代码控制. 因为git用的比较少,还不太熟悉,都是网上找资料,边看边学边做,如有不对 ...

  4. http 协议( 简单了解 )

    HTTP 请求协议 超文本传输协议,是一种用于分布式写作式和媒体信息系统的应用层协议. HTTP是万维网的数据通信的基础. HTTP协议概述 HTTP是一个客户端终端 (用户) 和服务器端 ( 网端) ...

  5. listview自定义适配器

    class FruitAdapter(activity: Activity ,val id:Int,data:List<Fruit>):ArrayAdapter<Fruit>( ...

  6. C语言学习--动态内存分配(未完待续)

    内存分配的类型: 在C/C++中内存分为5个区,分别为栈区.堆区.全局/静态存储区.常量存储区.代码区. 静态内存分配:编译时分配.包括:全局.静态全局.静态局部三种变量. 动态内存分配:运行时分配. ...

  7. 富士胶片2105N打印机安装说明

    打开驱动文件,执行软件 自定义安装驱动 手动输入IP地址 下一步安装完成 自定义安装扫描软件 选择print & scan 下一步安装完成

  8. 让启动的jar包能打断点

    java  -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar rbpsems-web-2.0.0-SNAP ...

  9. C++基础复习题(笔试题)

    C++基础~for循环:选择,判断 HELLO,亲爱的小朋友! 我们准备 35个选择题,对for循环及之前的内容进行一个简单的复习,快来看一下吧! 顺序&选择结构 1.对于C++中变量的命名规 ...

  10. LinuxK8S集群搭建一(Master节点部署)

    系统环境: CentOS 7 64位 准备工作: 通过虚拟机创建三台CentOS服务器,可参照之前的文章:Windows10使用VMware安装centos192.168.28.128 --maste ...