磁盘的读取
磁盘:机械运动来读取数据,分为寻到时间,旋转延迟,传输时间,这个成本是访问内存的十几万倍
预读:是将数据读取到内存,相邻数据读取到内存缓冲区
数据库索引存储在磁盘上,表的数据量比较大时,索引的大小也随着增长,不可能加载所有,只能逐一加载每个磁盘页,每个磁盘页就是一个结点
每次磁盘IO读取的数据称为一页(4k,8k)
二叉查找树就是这一种,最坏的情况磁盘IO的次数由树的高度决定
二叉搜索树
1.所有非叶子结点至多拥有两个儿子(Left和Right)
2.所有结点存储一个关键字
3.非叶子结点的左指针的值小于叶子结点的值,非叶子结点的右指针的值大于叶子结点的值
平衡二叉树
是左子树和右子树一样高的二叉搜索树
B树,B-树
从查找算法中可以看出, 在B- 树中进行查找包含两种基本操作:
( 1) 在B- 树中查找结点;
( 2) 在结点中查找关键字。
由于B- 树通常存储在磁盘上, 则前一查找操作是在磁盘上进行的, 而后一查找操作是在内存中进行的, 即在磁盘上找到指针p 所指结点后, 先将结点中的信息读入内存, 然后再利用顺序查找或折半查找查询等于K 的关键字。显然, 在磁盘上进行一次查找比在内存中进行一次查找的时间消耗多得多.
因此, 在磁盘上进行查找的次数、即待查找关键字所在结点在B- 树上的层次树, 是决定B树查找效率的首要因素
特性:是一个多路搜索树
1 2 3 4 5 | ①:一个m阶的B-树,最多拥有m个子树 (m>2) ②:根节点至少有2颗子树 ③:分支结点最少要有[m/2]个子树,要向上取整 ④:每一层中,页子结点的值是按照升序进行存储的 ⑤:每个结点最多有m-1的key ⑥:所有的非叶子结点包含以下信息(n,A0,K1,A1,K2,A2,K3),n为关键码的个数,Ai为指向子树根节点的指针,Ki为关键码的值 n即为key,([m-1]/2<=n<=m-1) |
B+树
1 2 3 4 5 | 由于B-树类似于二叉树,查找速率也不高,所以就有了B+树类似于二叉树,查找速率也不高,所以就有了B+树了 ①: m阶(有m个子树)的节点包含有m个元素,就是m个key ②:根节点和分支结点不保存数据,只用于存储索引,所有数都存在叶子结点中 ③:所有分支结点和根结点都同时存在于子节点中 ④:页子结点包含所有的关键字以及执行数据的指针 |
红黑树
1 2 3 4 5 | ①:每个结点必须是红色或者黑色 ②:根结点必须是黑色 ③:页子结点必须是黑色 ④:如果一个结点是红色,则叶子结点必须是黑色 ⑤:从任意一结点到每个叶子结点的所有路径上包含的黑色结点数目相同 |