MySql数据库索引原理

逆熵柯里化
• 阅读 150

MySql数据库索引原理

这篇文章希望数据库索引的原理对大家有帮助。

第一部分从数据结构和算法理论方面讨论MySQL数据库索引的数学基础。

第二部分结合MySQL数据库的InnoDB数据存储引擎中的索引的构建,实现了讨论集成索引、非聚合索引、覆盖索引等话题。

一、数据结构及算法理论

Innodb存储引擎实现索引数据结构的是B+树,下面介绍几个数据结构。一步一步地说明为什么应该使用B+树。

1.1 B+树索引

B+树索引的结构与二叉树很类似。键值快速找到数据。但是,B+树种的B不是二叉,它表示平衡。注意:只有索引行。数据库通过将页面加载到存储器中来检索存储器中的数据,最后检索数据。

介绍二分搜索法。按排序(递增或减少)的顺序记录,在搜索过程中通过跳转查找。例如,示出了5、10、19、21、31、37、42、48、50、52的10个数量。

可以以三次搜索速度找到48。逐次搜索需要8次。对于上述10个数,依次检索的平均检索次数是5.5次,二分检索法是2.9次,最坏的情况是按顺序检索的次数是10次,二分检索的次数是4次。两点搜索将innodb页面Directory的插槽按主关键字的顺序保存,对于每个具体记录的查询将页面Directory分成两部分进行检索。

1.2 二叉查找树

数字表示各节点的键的值。在树里找。左子树的键值总是小于跟的键值,右子树的键值总是大于跟的键值。通过中序遍历得到键值:2、3、5、6、7、8。

查找树的平均查找次数为2.3次,但是查找树是可以任意构建。和这样调查顺序是一样的。因此,引用了取得二叉树平衡的想法,AVL树。

1.3 定义

符合查找树的定义,其次必须满足任何节点的左右两个子树的高度最大差为1。

二叉树的平衡非常快,但是为了维持二叉树的平衡,通常需要一次以上的左转和右转插入或更新后树木的平衡。

1.4 B+树特性

全部记录在叶节点中,按顺序保存,各叶节点(以页为单位)在逻辑上连续保存,是双向循环链表。

B+树插入必须确认插入后的叶节点中的记录还被排序,因此在插入时必须考虑以下三种情况。

数据库中的一个特征是B。因此,在数据库中,B+树的高度通常在2~3层,也就是说,正在寻找某个键行的记录。最多可以进行2~3次IO。普通盘每秒至少可以进行100次IO。

二、索引摘要和非编译索引

集合索引和非集合索引的区别在于页节点是否保存整个行的记录。

2.1 聚集索引

InnoDB存储引擎表是索引组织表,表格数据按主关键字顺序保存。集合索引是从各表的主键制作B+树,在叶节点中存储有表整体的行记录数据,因此索引聚集的叶节点也成为数据页。此特性用于收集索引,索引表中的数据也被确定为索引的一部分。同时B+树的数据结构相同。每个数据页面通过双向链接链接链接。

实际数据只由一个B+树排列。因此,每个表格只有一个链接索引。在许多情况下,查询优化器倾向于采用集中索引,因为它可以在索引的叶节点处直接找到数据。此外,由于定义了数据的逻辑顺序,所以可以快速访问对象范围的查询。查询优化器可以很快地发现需要扫描某范围的数据。注意各页的记录也用双向链保持。

2.2 非聚集索引

也叫辅助索引。数据行中没有全部数据。页面节点除了关键字之外,每个页面级别的索引都包含书签。InnoDB记忆引擎告诉我们索引对应的行数据在哪里。因为InnoDB存储引擎表是索引组织表,因此InnoDB存储引擎的辅助索引书签是该行的数据的集合索引键。图是索引和辅助索引的关系。

用辅助索引检索数据时,InnoDB存储引擎创建循环辅助索引,用叶电平指针取得箭头键索引的键,用主键索引找到完整的行记录。例如,要在三个高度的辅助索引树中查找数据,必须找到辅助索引的主关键字。期间是3次。如果索引树的高度为3,则会检索3次组合索引。要搜索有完整行数据的页面,6次逻辑Io必须访问最终数据页面。

MySql数据库索引原理

点赞
收藏
评论区
推荐文章
芝士年糕 芝士年糕
2年前
修改MySQL密码的四种方法
整个3A的VPS搭建mysql真不错方法1:用setpassword命令 (1)首先要先登录MySQL:!image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/79be
Wesley13 Wesley13
3年前
SQL优化看这一篇就够了
MySQL索引1\.定义索引是帮助MySQL高效获取数据的数据结构。索引内部存在一个键值和对应数据的物理地址,当数据很多的时候,索引文件会很大,所以一般以文件的形式存储于磁盘中,后缀名为.myi。2\.常用索引类型聚集索引次要索引覆盖索引
Gwendolyn62 Gwendolyn62
4年前
数据库常见面试题汇总
阅读指南文章目录1.事务四大特性(about:blank1_4)2.数据库隔离级别(about:blank2_12)3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景(about:blank3MYSQL_27)4.索引有B索引和hash索引(about:b
Wesley13 Wesley13
3年前
mysql sql优化
前言有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧。注:这篇文章是以MySQL为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础。优化目标  1.减少IO次数  IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90
Wesley13 Wesley13
3年前
mysql面试题
MySQL面试索引相关1.什么是索引?索引是一种数据结构,可以帮助我们快速的进行数据的查找.1.索引是个什么样的数据结构呢?索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B树索引.
Wesley13 Wesley13
3年前
thinkphp 基本配置
12returnarray(34//定义数据库连接信息5'DB\_TYPE''mysql',//指定数据库是mysql67'DB\_HOST''localhost',89'DB\_NAME''uchome',//数据库名1011'DB\_USER''root
Wesley13 Wesley13
3年前
MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文
Stella981 Stella981
3年前
Sphinx实时索引
数据库中的数据很大,然后我有些新的数据后来加入到数据库中,也希望能够检索到,全部重新建立索引很消耗资源,这样需要用到“主索引增量索引”的思路来解决,这个模式实现的基本原理是设置两个数据源和两个索引。1、创建一个计数器一个简单的实现是,在数据库中增加一个计数表,记录将文档集分为两个部分的文档ID,每次重新构建主索引时,更新这个表先在mysql
Wesley13 Wesley13
3年前
MySQL数据库的高可用性分析
推荐理由:我们知道存储数据的安全性和可靠性是生产数据库重点要思考的问题,海量的应用将数据存储在MySQL数据库中,那么如何保障MySQL高可用性了,下面我给大家推荐的这篇文章,主要分析了目前采用较多的保障MySQL可用性方案,希望对大家有所帮助。以下为文章原文:作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
h2database BTree 设计实现与查询优化思考 | 京东云技术团队
本文理论结合实践,通过BTree索引的设计和实现,更好的理解数据库索引相关的知识点以及优化原理。