Oracle中应使用哪种类型的索引

时间:2015-05-12 07:11:34

标签: oracle

我在Oracle 11G中有一个7列的大表。表的总大小超过3GB,此表中的总行数为1876823.我们正在使用查询 select doc_mstr_id from index_mstr where page_con1 like('%sachin%')它花了差不多一分钟。请帮我优化查询以及该表的正确索引。如果此表需要分区,请告诉我。

以下是列描述

INDEX_MSTR_ID NUMBER         
DOC_MSTR_ID NUMBER         
PAGE_NO NUMBER         
PAGE_PART NUMBER         
PAGE_CON1 VARCHAR2(4000)

FILE_MODIFIED_DATE DATE           
CREATED_DATE DATE 

1 个答案:

答案 0 :(得分:3)

此查询始终会导致全表扫描。由于前导通配符,您唯一的过滤器无法使用B-TREE索引:

where page_con1 like('%sachin%')

如果要进行大量此类查询,则需要在该列上构建Text索引。从其数据类型page_con1看来,它包含文本片段而不是完整文档,因此您应该使用CTXCAT索引。这种类型的索引具有事务性的优点,而不需要后台维护。 Find out more

您的查询将如下所示:

select doc_mstr_id from index_mstr 
WHERE CATSEARCH(page_con1, 'sachin') > 0;