我最近在阅读关于Oracle索引组织表(IOT)的内容,但我不确定我是否理解何时使用它们。所以我有一个小桌子:是否适合索引组织表?
create table categories
(
id VARCHAR2(36),
group VARCHAR2(100),
category VARCHAR2(100
)
create unique index (group, category, id) COMPRESS 2;
的id
列是从其他表entries
一个外键和我常用的查询是:
select e.id, e.time, e.title from entries e, categories c where e.id=c.id AND e.group=? AND c.category=? ORDER by e.time
条目表正确索引。这两个表都有数百万行(当前16M),目前这个查询真的很臭(注意:我把它换成了分页查询,所以我只返回前20个,但为了简单起见我省略了) 。
因为我基本上索引整个表,所以创建此表作为IOT是否有意义?
编辑大众的需求:
create table entries
(
id VARCHAR2(36),
time TIMESTAMP,
group VARCHAR2(100),
title VARCHAR2(500),
....
)
create index (group, time) compress 1;
我真正的问题我不认为要看这虽然。基本上,如果你有一个有少量列的表(在这个例子中是3个),并且你打算在所有三行上放置一个复合索引,是否有任何理由不使用IOT?
你可以显示条目表+索引吗? – 2009-10-16 20:34:30
完成,表格添加 – Gandalf 2009-10-20 19:37:33
两张表格之间的基数是多少?我有点困惑,因为你声明“两个表都有16M行”。 - 什么是类别表的主键..您提到的唯一索引? - 组和声音与我非常相似..有什么区别? (基本上,我正在寻找如何提高查询性能的方法,不应该影响类别是否是物联网。) – Thorsten 2009-10-22 20:09:56