推荐引文:
http://blog.csdn.net/liangbinny/article/details/6272523
http://blog.csdn.net/fengzhu1008/article/details/3784853
由于表数据量大(百万级),查询的约束方式多,采用创建一般索引的方式,查询速度依旧不能满足客户的需求,通过构建全文索引,将查询速度从原来的10多秒减为1.5秒以内。同时,能满足查询一些特殊的要求。
1.赋予ctxapp权限
sys用户下:
/*给用户赋权/
GRANT CONNECT, RESOURCE, DBA TO user;
grant ctxapp to user;
alter user ctxapp default role all;
/*通常ctxsys处于锁定状态,需要解锁ctxsys用户/
alter user ctxsys account unlock;
/*ctxsys/ctxsys账户下,对象权限/
grant execute on ctx_ddl to ctxapp;
2.创建索引
DROP INDEX STDWX_DATA.I_STD_STD_NO;
CREATE INDEX STDWX_DATA.I_STD_STD_NO ON STDWX_DATA.STD
(STD_NO)
INDEXTYPE IS CTXSYS.CONTEXT
NOPARALLEL;
3.创建存储过程刷新索引
CREATE OR REPLACE procedure P_STD_SEARCHS_NO as
BEGIN
ctx_ddl.sync_index('I_STD_STD_NO');
ctx_ddl.optimize_index('I_STD_STD_NO','FULL');
END;
/
4.创建job,定时执行存储过程
BEGIN
SYS.DBMS_JOB.REMOVE(41);
COMMIT;
END;
/
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'STDWX_DATA.P_STD_SEARCHS_NO;'
,next_date => to_date('27-03-2013 04:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE+1)+4/24'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
/
注意:
1.使用getHibernateTemplate().saveOrUpdate(bean)去修改一条记录时,将对这条记录的全文索引进行破坏,故如果创建全文索引的那列没有发生修改,可以使用写sql语句update bean set 。。。。。。where id = xxx 的方式进行修改。如果创建全文索引的那列发生修改后,可以用getHibernateTemplate().saveOrUpdate(bean)的方式进行修改。 通过定时执行job来重建索引。
2.可以在同一列上同时建一般的索引和全文索引。
3.全文索引用于模糊查询。
4.