如何为下面的案例创建功能索引。
CREATE INDEX index1 ON table1(MIN(col1));
它给出了以下错误:SQL Error: ORA-00934: group function is not allowed here
请帮助!
答案 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
应该使用物化视图。