oracle全文索引

推荐引文:

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.


 

发布了53 篇原创文章 · 获赞 13 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/honghuajun/article/details/8721626