数据库索引原理
索引的目的在于提高查询效率,索引就像是书的目录,是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。
索引的原理在于使用空间换时间,索引会将建立的索引KEY存储在N叉树(BTree)。BTree适合在磁盘存储设备上组织动态查找表,这些数据结构以某种方式引用(指向)数据。
磁盘IO预读
计算机操作系统考虑到磁盘IO操作的高昂代价,当一次IO操作时,会把当前磁盘页和相邻的数据也读取到内存缓存区。
索引的结构数据
索引是使用B+树实现的数据结构。

每个磁盘块包含:数据项(蓝色)、指针(黄色);非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,真实的数据存储在叶子结点。P1指向小于17的磁盘块,P2指向17和35之间的磁盘块,P3表示大雨35的磁盘块。
二叉树
二叉查找树是一种查找效率非常高的数据结构,二叉查找树的结构不适合数据库,因为它的查找效率与层数相关。它有三个特点。
- 每个节点最多只有两个子树。
- 左子树都为小于父节点的值,右子树都为大于父节点的值。
- 在n个节点中找到目标值,一般只需要log(n)次比较。
BTree树
这种数据结构,非常有利于减少读取硬盘的次数。假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据。

B树的特点也有三个。
- 一个节点可以容纳多个值。比如上图中,最多的一个节点容纳了4个值。
- 除非数据已经填满,否则不会增加新的层。也就是说,B树追求"层"越少越好。
- 子节点中的值,与父节点中的值,有严格的大小对应关系。
网友评论