Oracle功能索引创建

时间:2012-06-20 07:38:54

标签: sql oracle indexing

如何为下面的案例创建功能索引。

  

CREATE INDEX index1 ON table1(MIN(col1));

它给出了以下错误:SQL Error: ORA-00934: group function is not allowed here

请帮助!

2 个答案:

答案 0 :(得分:6)

如果你想在col1上创建一个索引来加速像这样的查询:

SELECT MIN(col1)
  FROM table1

那么你不需要功能索引。只需像这样创建普通索引:

CREATE INDEX index1 ON table1(col1);

MIN(col1)上创建功能索引 - 如果可能的话 - 将导致索引对于每一行具有相同的值(col1的最小值)。这样的指数完全没用。

答案 1 :(得分:3)

如果您希望能够更快地获得col1的最小值(我假设您这样做),那么您可以使用物化视图

create materialized view table1_mat
       refresh on commit 
       as
       select min(col1) min_col1
         from table1;

您获得col1的最小值,然后如下:

 select min_col1 from table1_mat;

但请注意,虽然选择最小值可能会加快,但table1上的插入和更新时间可能会变慢。

使用查询重写,甚至可以使用实体化视图而无需查询原始查询:

alter materiazlied view table1_mat enable query rewrite;

然后

select min(col1) from table1

应该使用物化视图。