自学内容网 自学内容网

学习笔记035——MySQL索引

数据库索引

索引是为了提高数据的查询速度,相当于给数据进行编号,在查找数据的时候就可以通过编号快速找到对应的数据。

索引内部数据结构:B + Tree

主键自带索引。 如:

insert into user (id, name) values (1,'f');
insert into user (id, name) values (5,'h');
insert into user (id, name) values (2,'d');
insert into user (id, name) values (6,'c');
insert into user (id, name) values (3,'e');
insert into user (id, name) values (4,'a');
insert into user (id, name) values (8,'g');
insert into user (id, name) values (7,'b');

在这里插入图片描述

乱序插入数据,会自动按照 id 进行升序排列,这是因为主键自带索引。

数据存储的内部结构类似于链表的形式,通过指针关联不同的数据。

在这里插入图片描述

这种结构当数据量很大的时候查询还是很慢,MySQL是如何解决的?

MySQL中有一个 page 的概念,相当于给数据进行分页,把一部分数据存入一个 page 中。

如下图所示:

在这里插入图片描述

每个 page 可以存储 16KB 的数据,这样就相当于给数据建立了上层目录。先找大目录,再找具体的数据。

MySQL给 page 也提供了快速查询的 page目录,如下所示:

在这里插入图片描述

把每个 page 中的第一条数据id+指针 存入 page目录 中,查询数据的时候,先找到它的 page。再进入到相应 page 里面查询具体的数据。

如:查询出 id=4 的数据,因为3 < 4 < 5,所以根据 page 目录可以判断在 page2 中,然后在 page2 中查询具体的数据。

一个 page目录 也可以存储 16KB 的数据,如果是海量数据,page目录也会有很多层。

为了提高查询效率,MySQL给 page目录 再加上一次目录,如下所示:

在这里插入图片描述

这种结构就是 B+树

假设一条记录的空间为32个byte,最底层一个单元可以存储数据 16*1024/32=512

第二层只需要记录 id+p,假设是6个byte,则可以保存的数据是 16*1024/6=2730

第三次存储的数据是 16*1024/6=2730

总共可以存储的数据是 512 * 2730 * 2730=38亿(约等于)


原文地址:https://blog.csdn.net/code__bee/article/details/144054350

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!