Mysql索引原理及各种tree的比较

栏目: 数据库 · 发布时间: 7年前

内容简介:索引是为了加速对表中的数据行的检索而创造的一种分散存储的数据结构mysql的索引是由存储引擎来实现,不同的存储引擎实现方式不同。一般是存放在磁盘中

索引是为了加速对表中的数据行的检索而创造的一种分散存储的数据结构

2、索引的实现

mysql的索引是由存储引擎来实现,不同的存储引擎实现方式不同。

3、存放位置

一般是存放在磁盘中

4、作用

  • 减少扫描的数据行
  • 可以把随机IO变成顺序IO
  • 可以帮助我们在分组、 排序 等操作时,避免使用临时表

5、索引结构

我们都知道 mysql 的索引使用B树来实现的,那么为什么会考虑B树,不考虑其他数据结构呢?

5.1 首先我们来看普通的二叉树。

普通的二叉树不是绝对平衡的,会有一个问题,如下图:

Mysql索引原理及各种tree的比较

它有可能会形成一个链表,这样就失去了二叉树的优势,需要遍历查找,性能查。

5.2 那么如果我们选择平衡二叉树呢?如下图:

Mysql索引原理及各种tree的比较
Mysql索引原理及各种tree的比较

平衡二叉树没有普通二叉树可能会形成链表的问题,但是它还有其他的问题。

a、它太深了

  • 这里的太深是指树的高度,大家不要想歪了~
  • 如果在数据量很大的情况下,这棵树的高度很可能成千上万,因此它的IO次数也会很频繁,会严重影响性能

b、它太小了

  • 太小指的是每一个磁盘块(节点)保存的数据量太小了
  • 没有利用好操作磁盘IO的数据交换特性(4K)
  • 没有利用好磁盘IO的预读能力(空间局部性原理)

这里解释下为什么说没有利用好。

1、操作系统磁盘IO的数据交换一次默认是4KB大小,但是我们的节点里面存储的数据远远小于4KB,即我们进行了一次IO但是没有完全利用这次IO的数据交换大小,造成浪费。

2、操作系统磁盘IO具备预读能力,是什么意思呢?比如我们要读取一张20KB大小的jpg图片,我们第一次读了4KB的头内容,操作系统会认为我们可能需要接下来的16KB的剩余内容,所以会一次性把剩余的内容都传输给我们。

这里我选择的是一个3路的平衡查找树。(即一个节点最多可以有3-1=2个元素)

它有以下几个特点:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

游戏化革命:未来商业模式的驱动力

游戏化革命:未来商业模式的驱动力

[美]盖布·兹彻曼、[美]乔斯琳·林德 / 应皓 / 中国人民大学出版社有限公司 / 2014-8-1 / CNY 59.00

第一本植入游戏化理念、实现APP互动的游戏化商业图书 游戏化与商业的大融合、游戏化驱动未来商业革命的权威之作 作者被公认为“游戏界的天才”,具有很高的知名度 亚马逊五星级图书 本书观点新颖,游戏化正成为最热门的商业新策略 游戏化是当今最热门的商业新策略,它能帮助龙头企业创造出前所未有的客户和员工的参与度。商业游戏化策略通过利用从游戏设计、忠诚度计划和行为经济学中所汲取......一起来看看 《游戏化革命:未来商业模式的驱动力》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具