我在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
答案 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;