在实际应用中oracle表建立索引很重要的,我的总结时,查询时不要用*,有group by的字段要建索引,我的现在的项目中真的起了很大的做用。
下面是一下更新时索引禁用,查询时启用的例子。
- -在函数或都触发器中直接调用
AlterIndexState('recimport',0);
AlterIndexState('recimport',0); --'recimport' 为表名,0为禁用,1为启用
create or replace procedure AlterIndexState(tableName in varchar2,state in number) is
rc SYS_REFCURSOR;
indexName varchar2(40);
vsql varchar2(100);
begin
open rc for select index_name
from user_indexes
where table_name = upper(tableName);
loop
fetch rc into indexName;
exit when rc%notfound;
begin
vsql := 'alter index '||indexName;
if state = 0 then
vsql := vsql||' unusable';
else
vsql := vsql||' rebuild';
end if;
execute immediate vsql;
dbms_output.put_line(vsql||' success');
exception
when others then
null;
end;
end loop;
end;
/