在11g R2上优化Oracle文本名称搜索工具

时间:2016-03-14 17:05:52

标签: oracle oracle11g oracle-text

我正试图弄清楚如何使用11g R2上的Oracle Text Name Search Facility来获得合理的性能。

为了进行测试,我创建了一个带有objectid和fullname的表,从现有的表中填充大约。 5,400,000行:

create table personname as
select p.objectid, p.fname||chr(32)||p.mname||chr(32)||p.lname as fullname
from person p;

然后我按如下方式设置数据存储区和分区组的首选项:

begin
  begin
    ctx_ddl.create_preference('namesearch_ds', 'multi_column_datastore');
    ctx_ddl.set_attribute('namesearch_ds', 'columns', 'fullname');
  end;

  begin
    ctx_ddl.create_section_group('namesearch_sg', 'basic_section_group');
    ctx_ddl.add_ndata_section('namesearch_sg', 'fullname', 'fullname');
  end;
end;

最后创建上下文索引:

create index personname_idx
on personname(fullname)
indextype is ctxsys.context
parameters
('datastore namesearch_ds section group namesearch_sg sync(on commit)');
到目前为止,一切都很好。 但是,查询速度很慢。选择这样的选择:

select score(1), pn.* 
from personname pn
where contains(pn.fullname, 'ndata(fullname, Bjørn Egil Hansen)', 1) > 0
  and rownum <= 50
order by score(1) desc;

可能需要几分钟,响应时间似乎随着查询中的名称数量而增加。

我尝试过使用Oracle doc建议的各种查询提示,即:

  • FIRST_ROWS(50)
  • DOMAIN_INDEX_SORT
  • PARALLEL(8)

但它似乎没有太大的区别(实际上很难衡量,因为第二次执行相同的查询的速度要快得多)。

0 个答案:

没有答案