MYSQL索引

2024-01-09 16:05:39

索引

索引概述

索引是帮助MySQL高效获取数据的数据结构。

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

索引优点

1、提高数据检索的效率,降低数据库的IO成本。

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

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

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

索引的缺点

  1. 创建索引和维护索引要耗费时间,并随着数据量的增加,耗时也会增加。
  2. 索引需要占磁盘空间,每一个索引还要占一定的物理空间,存储在磁盘上,如果有大量的索引,索引文件就可能比数据文件更快达到最大文件尺寸。
  3. 虽然索引大大提高了查询速度,同时却会降低更新表的速度。当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

B+树结构特点

1、非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value。

2、树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。

一个B+树能存储多少数据

MySQL中InnoDB页的大小默认是16KB。

计算机在存储数据的时候,最小存储单元是扇区,一个扇区的大小是 512 字节,而文件系统(例如 XFS/EXT4)最小单元是块,一个块的大小是 4KB。InnoDB 引擎存储数据的时候,是以页为单位的,每个数据页的大小默认是16KB,即四个块。

在B+树中,一个结点就是一页。非叶子结点由主键值和一个指向下一层的地址的指针组成的组合组成。叶子结点中由一组键值对和一个指向该层下一页的指针组成,键值对存储的主键值和数据。

由存储结构,可以大概计算出一个B+树能存储的数据数量。

指针在InnoDB中为6字节,假设主键的类型是BIGINT占8字节,总共占14字节。

计算出一个非叶子结点可以存储16 * 1024 / 14 = 1170个索引指针。

假设一条数据的大小是1KB,么一个叶子结点可以存储16条数据。

得出两层B+树可以存储1170 x 16 = 18720 条数据。

三层B+树可以存储1170 x 1170 x 16 = 21902400条数据。

文章来源:https://blog.csdn.net/aaxzz/article/details/135479229
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。