MySQL InnoDB存储引擎体系架构支持的索引是什么

技术MySQL InnoDB存储引擎体系架构支持的索引是什么本篇文章为大家展示了MySQL InnoDB存储引擎体系架构支持的索引是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收

本文向您展示了MySQL InnoDB存储引擎架构支持哪些索引。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

众所周知,在MySQL的InnoDB引擎中,为了提高查询速度,可以给字段添加索引。索引就像一个图书目录,一本书的内容可以通过目录定位到哪一页。

InnoDB支持几个索引:

b树索引

全文索引

散列索引

关注B-树索引。

一、数据结构——B树。

相信大家在大学的数据结构课程中都学过二分搜索法,二叉树,平衡二叉树。在一组有序的数据中,二分搜索法可以快速检索log2N复杂度的数据。平衡二叉树由二叉查找树演化而来,解决了二叉查找树在极端情况下转化为单链表的问题。b树呢?我们来看看B树的结构。

MySQL  InnoDB存储引擎体系架构支持的索引是什么

在B树中,数据按照从下到上的顺序存储在叶节点中。从上图的B-tree可以得出,这个B-tree的高度是2,每页可以存储4条数据,扇出是5。第一层是索引页,第二层是数据页。B-tree索引的本质是B-tree在数据库中的实现,B-tree的高度一般限制在2-4层,磁盘的IO操作只需要2-4次,在索引上查找数据非常快。

二是B-树索引。

1.聚集索引。

在InnoDB引擎中,有一个聚集索引,它通常是一个主键。如果用户没有显示指定的主键,InnoDB会选择默认情况下不为null的表的第一个唯一索引作为主键,否则会自动创建一个6字节的_rowid作为主键。

MySQL  InnoDB存储引擎体系架构支持的索引是什么

上图是聚集索引示意图。从上图我们可以看到,树分为两层,第一层是索引页,第二层是数据页,这其实就是数据存储的地方。我们还可以得出结论,索引页存储的不是数据,而是指向真实数据的偏移量,真实数据存储在第二层的数据页中。因此,如果一条SQL语句命中索引,它只命中索引页的数据,然后通过索引页找到真正数据所在的页。

聚集索引的存储不是物理上连续的,而是逻辑上连续的,因为页是由双链表维护的,每页的行记录也是由双链表维护的。为什么是双链表?这是因为它便于范围查询和排序,例如查找索引所在的数据页的偏移量、直接遍历链表或反向遍历链表。例如

从表中选择*其中id10和id1000

2.辅助索引。

InnoDB的另一个索引,辅助索引,也称为二级索引或非聚集索引。对于辅助索引,叶不包含行中记录的所有数据。除了键值之外,叶节点还包含一个叫做“书签”的东西,用来告诉InnoDB在哪里可以找到需要的行数据,所以书签实际上是存储聚集索引的。因此,如果SQL命中辅助索引,查询过程将分为两个步骤:

1.找到索引页。

2.通过索引页查找数据页,该页包含聚集索引的值。

3.通过聚集索引查找行记录。

因此,辅助索引一般比聚集索引多一个IO。

MySQL  InnoDB存储引擎体系架构支持的索引是什么

一个容易被DBA忽略的问题:如果一条SQL语句命中索引,B-tree索引找不到给定查询条件的特定行,只能找到查询到的数据行所在的页面,然后将数据读入内存,然后在内存中遍历所有行找到数据。此外,每页的大小为16k,每页将包含多行,并且行由双链表组织,因此在按逆序查询范围或排序时,只需遍历链表即可。

以上内容就是MySQL InnoDB存储引擎架构支持哪些索引。你学到什么知识或技能了吗?如果你想学习更多的技能或丰富你的知识储备,请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/46788.html

(0)

相关推荐

  • 山药鸡蛋饼的做法,山药的各种做法宝宝吃法

    技术山药鸡蛋饼的做法,山药的各种做法宝宝吃法【奶香山药小馒头】铁棍山药山药鸡蛋饼的做法,面粉,牛奶1.取适量山药上锅蒸熟,压成山药泥,晾凉至室温;
    2.山药泥中加2g酵母、100ml牛奶搅拌均匀;
    3.加200g面粉和成

    生活 2021年10月24日
  • leetcode笔记删除排序数组(leetcode排序中查找元素)

    技术leetcode如何寻找数组的中心索引小编给大家分享一下leetcode如何寻找数组的中心索引,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧

    攻略 2021年12月15日
  • C++模板使用方法是什么

    技术C++模板使用方法是什么本篇文章为大家展示了C++模板使用方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言中的模板应用在一定程度上大大提高了程序开发的效

    攻略 2021年10月27日
  • C#如何实现Winform自动升级程序

    技术C#如何实现Winform自动升级程序这篇文章给大家分享的是有关C#如何实现Winform自动升级程序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。开发第三方工具包新建一个WinForm项

    攻略 2021年12月1日
  • javaweb中dao是什么开发模式(javaweb阶段包含哪些)

    技术Java中面向Web开发的生旦净末丑指的是什么本篇文章给大家分享的是有关Java中面向Web开发的生旦净末丑指的是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一

    攻略 2021年12月14日
  • Redis高级应用的示例分析

    技术Redis高级应用的示例分析小编给大家分享一下Redis高级应用的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis高级实用

    攻略 2021年11月15日