索引的数据结构

文章目录

  • 索引的数据结构
    • 1. 为什么使用索引
    • 2 索引及其优缺点
      • 2.1 索引概述
      • 2.2 索引优点
    • 3. InnoDB中索引的推演

索引的数据结构

1. 为什么使用索引

索引是存储引擎用于快速找到数据记录的一种数据结构,如书的目录,通过目录找到对应文章的页码,可以快速定位到需要的位置。

MYSQL中进行数据查找时,首先看查询条件是否命中某条索引,符合通过索引查找相关数据,如果不符合则需要进行全表扫描,直至找到与条件符合的记录。

索引的数据结构_第1张图片

  • 上图左边是磁盘存储,离散式的,没有索引。数据分布在磁盘不同位置下面,非常耗时

  • 右边是顺序查找:依旧非常耗时,如果表很大,有成千上万条数据,就要做很多很多次磁盘I/O。时间复杂度o(n)

    查找某条记录,CPU先去磁盘查找这些记录,找到后加载到内存,再对数据进行处理,这个过程最耗时间的就是磁盘I/O(涉及磁盘旋转时间(速度较快)、磁头的寻道时间(速度慢、耗时))

假如给数据使用 二叉树进行存储,如下图所示:时间复杂度为log2n
索引的数据结构_第2张图片

  • 建立索引原因目的就是为了减少磁盘I/O次数,加快查询速度

2 索引及其优缺点

2.1 索引概述

索引(index)是帮助MYSQL高效获取数据的数据结构

  • 索引的本质:是 数据结构,可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实现 高级查找算法

  • 索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同,并且每种存储引擎不一定支持所有索引类型

    同时,存储引擎可以定义每个表的最大索引数最大索引长度。所有存储引擎支持每个表至少16个索引总索引长度至少256字节。有些存储引擎支持更多的索引数和更大的索引长度。

2.2 索引优点

  1. 类似大学图书馆建书目索引,提高数据检索的效率降低 数据库的IO成本 ,这也是创建索引最主要的原因

  2. 通过创建唯一索引,可以保证数据库表中每一行数据的唯一性

  3. 在实现数据的参考完整性方面,可以 加速表和表之间的连接 。换句话说,对于有依赖关系的子表和父表联合查询时,可以提高查询速度

  4. 使用分组和排序子句进行数据查询时,可以显著 减少查询中分组和排序的时间 ,降低了CPU的消耗

    注意:索引可以提高查询速度,但会影响插入记录的速度。在这种情况下,最好的办法是 先删除表中的索引,然后 再插入数据插入完成后再创建索引

3. InnoDB中索引的推演

索引的数据结构_第3张图片

你可能感兴趣的:(数据结构)