如何为以下情况创建功能索引。
CREATE INDEX index1 ON table1(MIN(col1));
它给出以下错误:SQL Error: ORA-00934: group function is not allowed here
请帮忙!
如果您想在其上创建一个索引col1
,将加快这样的查询:
SELECT MIN(col1)
FROM table1
那么您不需要功能索引。只需像这样创建普通索引:
CREATE INDEX index1 ON table1(col1);
如果可能的话,在上创建功能索引将导致索引对于每一行都MIN(col1)
具有相同的值( 的最小值)。col1
这样的索引将完全没有用。
如果您希望能够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
应该使用物化视图。