oracle中的多属性索引是如何实现的?

panppl 2004-11-29 11:39:44
其实oracle中的单属性索引的数据结构也不是很清楚,但我想可能是B树之类的吧,多属性索引用的是什么树结构呢?查询和插入的效率如何?
...全文
321 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hippie1024 2004-12-07
  • 打赏
  • 举报
回复
OTN网站
OCP的教材
ITPUB论坛一些朋友自己dump测试。

其实有些太internal的内容看起来挺枯燥,
一般是dump结果加数据结构去看问题。

理解到一定程度,使你可以清楚的去使用索引,可以对索引增长对性能的影响基本心里有数,就差不多了。毕竟还是为了应用么。
daydayupliq 2004-12-06
  • 打赏
  • 举报
回复
多个字段建立索引,应该不会是合并的~
应该要注意建立索引时字段的前后顺序,以及SQL调用时字段的前后顺序,以利于迅速定位记录~
panppl 2004-12-06
  • 打赏
  • 举报
回复
hippie1024(痞子) :
你是在什么文档中看到这些的?能不能告诉我?谢谢。
hippie1024 2004-12-06
  • 打赏
  • 举报
回复
关于B-Tree索引:
首先ORACLE会对所有索引列依次排序(就象wxdsun(森)说的那样),
然后根据前导列(第一列)构建B_tree(这也说明了为什么复合索引中只使用非前导列时无法使用索引范围扫描).
一般是ROOT-->branch-->leaf.(具体构建过程可以参考数据结构的书中B_树的部分).
索引具体的值(所有索引的列和ROWID)会有序的放在leaf中,leaf之间维护着一个双向链表。
当我们做index range扫描时,只要搜索到起点,再根据链表顺序遍历到终点即可。
panppl 2004-12-05
  • 打赏
  • 举报
回复
wxdsun(森) :
你是说b-tree的键值此时就是由“部门”和“时间”合并而成的一个数值,然后再根据这个数值建立b-tree?么?
wxdsun 2004-12-04
  • 打赏
  • 举报
回复
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 .
panppl 2004-12-03
  • 打赏
  • 举报
回复
b-tree怎么对多个键值建立索引?例如:索引为两列:(部门,时间),如果查询某个时间的所有部门的情况,这种索引能够提高查询效率么?
lwj_dxy 2004-11-30
  • 打赏
  • 举报
回复
up
老码猿 2004-11-29
  • 打赏
  • 举报
回复
看oracle 的代码吧,哈哈,还是看Berkerly DB的代码吧.
daydayupliq 2004-11-29
  • 打赏
  • 举报
回复
普通的复合索引还是b-tree索引的~
一般来讲:
OLTP联机事务处理模式多采用B-TREE索引;
OLAP数据决策/数据仓库多采用bit-map索引;
呵呵,还要再研究研究!

3,496

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧