创建索引后,如果数据量大,如何能解决同步索引慢的问题!!
SQL> create index ind_person on person(info) indextype is ctxsys.context
  2  parameters('lexer ctxsys.test_chinese_lexer');  由于数据量比较大,用上面语句创建索引用了30多分钟,终于创建完成了,但是使用
ctx_ddl.sync_index('ind_person','50M');
ctx_ddl.optimize_index('ind_person','FULL');同步和优化索引也是非常慢,请问有没有好的解决办法??

解决方案 »

  1.   

    兄弟,很快是不可能的,但是有一点的优化空间,一个是内存加到100M(前提是你的PGA够大,大于2G才效),别外,把这个并行参数加进去:ctx_ddl.sync_index('ind_person','100M', parallel_degree=>2);
    ctx_ddl.optimize_index('ind_person','FULL', parallel_degree=>2); 
      

  2.   

    不好意思,请问PGA是什么意思?并且能解释一下并行参数parallel_degree=>2的意思吗?如果百万数据量,采用这种索引方法合理吗?多久同步和优化一次呀?
      

  3.   

    你在google上oracle PGA一下,马上明白parallel_degree=>2, 这个指的是并行度采用这种索引那是为了检查clob字段,如果普通的文本根本用不上
      

  4.   

    我有一个表,这个表有个clob字段,存放大量文本,现在这个表中数据将近100万了,为了提高对这个clob字段的查询速度(原来用like,速度很慢),除了用oracle text全文索引外,还有别的方法吗?
      

  5.   

    ctx_ddl.sync_index('ind_person','50M'); 
    ctx_ddl.optimize_index('ind_person','FULL'); 我还发现了个问题,用上面的语句同步优化已经建好的索引,非常慢,还不如drop index后再重建快呢?请问是这样吗?
      

  6.   

    补充:
    我反复测试得出了这么个结果。
    ctx_ddl.sync_index('ind_person','50M'); ctx_ddl.optimize_index('ind_person','FULL'); 用上面语句同步,速度还可以;优化的素的非常慢。
      

  7.   

    如果你的机器不是CPU对称,那加上并行度速度会更慢的,我的环境是12个CPU,所以一般加上并行度速度会变快,不过,并行度4,8啊什么的跟2没什么大的区别我想,你的机器内存不怎么大,oracle设置的内存也比较小,所以,你现在的结果有可能就是最合适的,不同的机器会有不同的结果
      

  8.   

    谢谢!  我使用的虚拟机,内存设置的512M,我发现同步还是挺快的,优化(ctx_ddl.optimize_index('ind_person','FULL'))比较慢,不知道为什么?