0

如何为以下情况创建功能索引。

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

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

请帮忙!

4

2 回答 2

6

如果您想在其上创建一个索引col1,将加快这样的查询:

SELECT MIN(col1)
  FROM table1

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

CREATE INDEX index1 ON table1(col1);

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

于 2012-06-20T08:06:01.793 回答
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

应该使用物化视图。

于 2012-06-20T08:47:04.903 回答