其实oracle中的单属性索引的数据结构也不是很清楚,但我想可能是B树之类的吧,多属性索引用的是什么树结构呢?查询和插入的效率如何?

解决方案 »

  1.   

    普通的复合索引还是b-tree索引的~
    一般来讲:
    OLTP联机事务处理模式多采用B-TREE索引;
    OLAP数据决策/数据仓库多采用bit-map索引;
    呵呵,还要再研究研究!
      

  2.   

    看oracle 的代码吧,哈哈,还是看Berkerly DB的代码吧.
      

  3.   

    b-tree怎么对多个键值建立索引?例如:索引为两列:(部门,时间),如果查询某个时间的所有部门的情况,这种索引能够提高查询效率么?
      

  4.   

    b-tree index 特点是排好顺序了, 如果是多个键值索引,排序的方式就是先排第一个,在排第二个部门(asc) 时间(asc)
    1         2004-11-1
    1         2004-11-2
    2         2004-10-1
    2         2004-11-1如果查询某个时间的所有部门的情况,这种索引能够提高效率,因为 index 是排好顺序的,
    而且index一般要比表小,扫描起来快.你可以看看执行计划,访问这个index 应该是 index Full Scan
    但是索引在处理 一个部门下所有时间情况 要比上面的要快,因为此时访问这个index 应该是 index range Scan 或者 index Unique Scan .
      

  5.   

    wxdsun(森) :
        你是说b-tree的键值此时就是由“部门”和“时间”合并而成的一个数值,然后再根据这个数值建立b-tree?么?
      

  6.   

    多个字段建立索引,应该不会是合并的~
    应该要注意建立索引时字段的前后顺序,以及SQL调用时字段的前后顺序,以利于迅速定位记录~
      

  7.   

    关于B-Tree索引:
    首先ORACLE会对所有索引列依次排序(就象wxdsun(森)说的那样),
    然后根据前导列(第一列)构建B_tree(这也说明了为什么复合索引中只使用非前导列时无法使用索引范围扫描).
    一般是ROOT-->branch-->leaf.(具体构建过程可以参考数据结构的书中B_树的部分).
    索引具体的值(所有索引的列和ROWID)会有序的放在leaf中,leaf之间维护着一个双向链表。
    当我们做index range扫描时,只要搜索到起点,再根据链表顺序遍历到终点即可。
      

  8.   

    hippie1024(痞子) :
        你是在什么文档中看到这些的?能不能告诉我?谢谢。
      

  9.   

    OTN网站
    OCP的教材
    ITPUB论坛一些朋友自己dump测试。其实有些太internal的内容看起来挺枯燥,
    一般是dump结果加数据结构去看问题。理解到一定程度,使你可以清楚的去使用索引,可以对索引增长对性能的影响基本心里有数,就差不多了。毕竟还是为了应用么。