有关Oracle索引层级的理解
Tags: B-treeBTreeB树Oracle数据结构索引索引层级索引高度
索引层级简介
在Oracle数据库中,索引是一种数据结构,用于加快查询数据的速度。当你执行一个查询时,如果数据库中有一个适当的索引,它可以直接跳到数据存储区中匹配的位置,而不需要全表扫描,从而提高查询效率。
Oracle中的索引是有层级结构的,也就是说,一个索引可能会包含多个层级。这些层级是按照B-tree结构组织的,也就是说,每个节点最多可以有多个子节点,每个节点都包含一部分数据,并指向下一层级的子节点。
在Oracle中,B-tree索引通常由根节点、中间节点和叶子节点组成。根节点位于B-tree的最上层,它会指向下一级中间节点。中间节点会包含一些索引列的值,并指向下一层级的中间节点或叶子节点。叶子节点包含了整个索引的所有信息,包括索引列的值以及对应的数据行的指针。
当你执行一条查询时,Oracle会从根节点开始,按照B-tree的结构依次遍历各个层级,直到找到匹配的叶子节点。如果索引层级越少,查询的效率就会更高,因为Oracle需要遍历的节点就会更少。因此,设计索引时,需要考虑索引的层级结构,以及如何优化查询的效率。
BLEVEL存储的就是目标索引的层级(也就索引的高度),它表示的是从根节点到叶子块的深度,BLEVEL被CBO用于计算访问索引叶子块的成本。BLEVEL的值越大,则从根节点到叶子块所需要访问的数据块的数量就会越多,耗费的I/O就会越多,访问索引的成本就会越大。BLEVEL的值从0开始算起,当BLEVEL的值为0时,表示该B树索引只有一层,且根节点和叶子块就是同一个块。在Oracle数据库里,如果要降低目标B树索引的层级,那么只能通过REBUILD该索引的方式来实现。
索引的范围检索性能是由索引的高度(BLEVEL)决定的,而不是由索引的大小决定。
一般来说,索引层级越低,查询的效率就越高。因为低层级的索引需要遍历的节点数更少,查询也就更快。
索引结构
Oracle在内部存储索引数据时,使用一种被称为平衡树的结构(B-Tree,B树),不是二叉树。这里的"-"是个连字符号,不是减号 ;这里的B代表的是balanced(平衡),而不是二叉(binary)。
对于MySQL来说,使用B+Tree(B+树)作为索引结构,使用InnoDB引擎,叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。