0

dbms_lob.instr 和 contains 之间是否有任何性能差异,或者我做错了什么?

这是我的代码

SELECT DISTINCT ha.HRE_A_ID, ha.HRE_A_FIRSTNAME, ha.HRE_A_SURNAME, ha.HRE_A_CITY,  
ha.HRE_A_EMAIL, ha.HRE_A_PHONE_MOBIL
FROM HRE_APPLICANT ha WHERE ha.HRE_A_STATUS_ID=1 AND ha.HRE_A_CURRENT_STATUS_ID <= '7' 
AND ((DBMS_LOB.INSTR(hre_a_for_search,'java') > 0) 
OR EXISTS 
(SELECT 1 FROM gob_attachment, gob_table WHERE hre_a_id=gob_a_record_id 
AND gob_a_table_id = gob_t_id AND gob_t_code = 'HRE_APPLICANT' 
AND CONTAINS (gob_a_document, 'java') > 0))
ORDER BY HRE_A_SURNAME

最后两行更改为使用 instr

AND dbms_lob.instr(gob_a_document,utl_raw.cast_to_raw('java')) <> 0))
ORDER BY HRE_A_SURNAME

我的问题是我想使用 instr 而不是 contains,但在我看来,instr 比包含要慢得多。

4

1 回答 1

3

CONTAINS将使用 Oracle Text 索引,因此您希望它比INSTR在运行时读取整个 CLOB 的效率要高得多。如果您为这两个语句生成查询计划,我希望您会发现差异与 Oracle Text 索引有关。

为什么要使用INSTR而不是CONTAINS

于 2012-02-28T15:09:46.147 回答