问题如题!
我知道使用B树建立的索引的时候,非叶子节点里面会包含这些信息:
键、子树引用,数据记录。
这个数据记录是什么意思呢?
是数据库里面某个表中某个记录在内存中的地址还是该记录的完整信息?
谢谢!
还想问一下,一般是用B-树还是用B+树建索引?

解决方案 »

  1.   

    嗯?和数据库有关吧,Oracle数据库一般的索引都是B+吧,记不清了
    这个不是偶们能够控制修改的,是数据库内部的数据结构。索引节点应该包含的是作为索引的字段的值和物理地址rowid,
    当然非叶子节点还需要包含父指针/子指针之类的咚咚,具体确实不清楚,当年C/C++都没有学好
    羞愧ing
      

  2.   

    如果使用B树,一个节点要占一页内存,里面却只记录一个记录的rowid,那样会不会太浪费了。
    如果我有一张用户表,里面包含有500个用户记录,那么建立这个B树索引就需要500个节点,也就是500个内存页,这个浪费是在是太大了吧。
    ??
    继续求教!
      

  3.   

    索引和内存有什么必然联系?
    索引也是存储在硬盘/磁带/something else上的,只有读取索引时候才会读取到内存中阿,rowid 应该占据6-8个字节吧(不是特别肯定,大概的一个数值)怎么会占据一个内存页?
      

  4.   

    这个吗......
    因为数据库里面索引的数据结构是B树,而B树中的每个节点都占一个内存页,也就是说,一棵B树,如果有10个节点,那么它将占据10个内存块,在搜索索引的时候,每次搜索一个节点,都必须进行一次辅存的读取(当然,如果一次性把所有索引节点都存入内存中就不需这么麻烦,但是有的机器内存很小,比如说一个文曲星,为内部的字典建立一个B树索引,那么可能每次都只能读取一个节点到内存中)。所以才会有我上面的那些问题,麻烦解释一下,谢谢了:)
      

  5.   

    再问一下,如果我想看一下Oracle等数据库的索引是怎么实现的,想看一下源码,应该到什么地方去学习呢?
      

  6.   

    B树中的每个节点都占一个内存页?
    谁说的啊?
    Oracle好像不开源的说,源码估计是没有希望看的
    楼主考虑去甲骨文,或者相关的数据库优化软件开发公司。他们才有可能有源码
      

  7.   

    Oracle中最通用的索引是B+索引,或者叫B*TREE索引。
    这种索引的节点分三种:root节点,非叶子节点,叶子节点。
    非叶子节点存储的是键值和指向下级非叶子节点或叶子节点的物理位置的指针。
    叶子节点存储的是键值和对应记录的物理位置的指针。
    B+索引不会包含数据记录。