B+树索引(1)简易版本索引 --mysql从入门到精通(十三)

2023-01-30 00:00:00 数据 记录 查找 主键 找到

前面我们说了innoDB有很多页类型,主要介绍了index索引页,包含七个主要部分。File header里有效验和和file_page_prev和file_page_next吧所有的页联系起来,组成双向链表。Page header里有当前页的槽点和记录数,还有next record来吧每个数据连接起来,组成单链表。查询的时候有page directory。File trailer里的效验和能检验数据是否完成。如果上面说的这些你都不明白,建议吧前面的文章再看一看,接下来的知识不适合你。什么?前面内容太多,太生涩看不懂?好的,等我!

没有索引的情况下查找

回忆一下,如果查询主键,则会用二分查找法找到对应的槽,然后遍历该槽的记录,找到对应的数据。

如果是非主键其他列查询,因为数据页中并没有非主键页的页目录,所以无法通过二分查找法定位槽,这种情况下,只能从小记录,依次遍历页里单链表的每条数据。

上诉是主键查找的时候,会用二分查找法找到页中对应的槽,其实不管属于不属于主键查找,找页都是在双向链表一个个遍历的,所以只能从个慢慢往后找,定位到字节需要的页,如果数据有上亿,这种是非常耗时的,mysql的设计者肯定不允许这种事情发生,这时候我们的索引就闪亮登场!!!

索引

先创建一个index_tb表,指定行格式为compcat,设置主键为c1,两个int类型,一个char类型c3:

mysql> create TABLE index_tb(
    -> c1 int,
    -> c2 int,
    -> c3 char(1),
    -> primary key(c1)
    -> 
    -> )row_format=Compact;
Query OK, 0 rows affected (0.04 sec)
 
 
//插入一些数据
mysql> INSERT INTO index_tb VALUES(1, 4, 'u'), (3, 9, 'd'), (5, 3, 'y');
Query OK, 3 rows affected (0.01 sec)

相关文章