mysql索引的实现原理

亦凉 2021-11-01 05:42 495阅读 0赞

1,mysql索引原理:

  1. hash:通过索引的计算定位到数据的存储的位置,进行一次I/O即可,效率非常高,但是是适合用于等值查询,范围查询索引是不起作用。
  2. B+breeMySQLb+tree不是b-tree,而是在b-tree上进行了优化,所有的data都放在了叶节点,目的是为了使根节点存储更多的索引key值,mysql默认每一节点层是存储16k的数据,假设:存储的主键索引是bigint类型,默认是8b大小,而存储子节点的地址是6b,总共14b16kb/14b=1170,所以根节点可以存储1170key,假设有三层的话,默认存储的数据1k的话,那么叶节点可以存储16个数据,1170\*1170\*16=两千一百多万,两千多万的数据只需要三次I/O就可以找到,而现在有个问题,如果我要范围查询怎么办?因为b+tree所有的data都是放在最后的叶节点上,每个叶节点都是根据索引的顺序存放的,并且每个叶节点跟叶节点是有相互引用的指针。所有范围查询可以快速找到,

2,问题:uuid和自增长id那个存储效率高?

  1. 因为mysqlb+breedata是根据索引的顺序存放的,如果是自增长id的话,每次插入数据直接插入尾部就可以了,效率很高,而如果是uuid的话,因为uuid是一段字符串,当插入表中时,会根据字符串排序,判断该插入b+bree的哪个位置,这个位置也是不确定的,但要如果插入的叶节点的数据已经存储满了,这时候会出现b+tree分裂的情况。b+bree重排问题,所以效率非常低。

3,表级别的存储引擎myisam和innodb的b+tree区别

  1. MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,InnoDB的数据文件本身就是索引文件。所以InnoDB表必须有一个主键,如果没有创建主键的话,mysql会默认帮你创建一个主键,而它的表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据,也就是主键对应的一行的记录,myisam是“非聚集”索引,InnoDB是聚集索引。

myisam

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUzMzg1Ng_size_16_color_FFFFFF_t_70

innodb:

  1. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUzMzg1Ng_size_16_color_FFFFFF_t_70 1][]

图片有引用:https://www.cnblogs.com/olinux/p/5217186.html

发表评论

表情:
评论列表 (有 0 条评论,495人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL索引实现原理

    2、MySQL 索引实现原理 MySQ 索引的原理和数据结构能介绍一下吗、MySQL 聚簇索引和非聚簇索引的区别是什么、他们分别是如何存储的?使用 MySQL 索引都有哪些原

    相关 MySQL 索引实现原理

    > 索引本质上就是一种通过减少查询需要遍历行数,加快查询性能的数据结构,避免数据库进行全表扫描,好比书的目录,让你更快的找到内容。(一个表最多16个索引) `一、索引的优缺

    相关 mysql索引实现原理

    一、定义 索引是为了加速对表中的数据行的检索而创造的一种分散存储的数据结构 二、索引实现 mysql的索引是由存储引擎来实现,不同的存储引擎实现方式不同。这里我们

    相关 mysql索引实现原理

    本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多

    相关 MySQL索引及其实现原理

    索引概述 索引是一种可以加快检索的数据库结构,它包含从表或视图的一列或多列生成的键,以及映射到指定数据存储位置的指针。索引是表的目录,在查找内容之前可以先在目录中查找索引位

    相关 mysql索引实现原理

    1,mysql索引原理:     hash:通过索引的计算定位到数据的存储的位置,进行一次I/O即可,效率非常高,但是是适合用于等值查询,范围查询索引是不起作用。