1
我在Oracle數據庫中有一個包含數百萬條記錄的表, 在此表上執行的DML命令主要是INSERT(不帶DELETE/UPDATE), 該表正在被特定列上的文本參數查詢, 我試圖通過添加CTXSYS.CTXCAT索引來調整此查詢的性能,並使用如下的catsearch函數, 但實際上,catsearch函數不返回預期結果如下:Oracle catsearch和CTXSYS.CTXCAT索引不能按預期工作
- 首先創建一個包含部門列和隨機搜索字符串的emp表
create table emp as
select rownum id , 'Employee ' || to_char(rownum) name , MOD(rownum,20) + 1 dept , dbms_random.string('A', 50) search_string
from dual
connect by level <= 1000000;
- 然後,創建2個指標 - 一個用於catsearch功能,另一個正指數
begin
ctx_ddl.create_index_set('emp_iset');
ctx_ddl.add_index('emp_iset','dept'); /* sub-index A */
end;
CREATE INDEX EMP_FULLTEXT_IDX ON emp(search_string)
INDEXTYPE IS CTXSYS.CTXCAT
PARAMETERS ('index set emp_iset');
create index emp_search_string_idx on emp(search_string);
現在,我希望,下面的查詢將返回相同的結果,但不幸的是,他們不「T:
select count(*) from emp where dept = 10 and lower(search_string) like '%test%';
select count(*) from emp where catsearch(search_string, 'test', 'dept = 10') > 0;
還,查詢的2個選項之間的負查詢返回了一些成果:
select * from emp where dept = 10 and lower(search_string) like '%test%'
minus
select * from emp where catsearch(search_string, 'test', 'dept = 10') > 0;
我試着查找catsearch函數和CTXSYS.CTXCAT索引的文檔,但沒有運氣, 任何幫助,將不勝感激。
謝謝,它解決了我的問題! – planben