Question

Y a-t-il une différence de performances entre dbms_lob.instr et contain ou est-ce que je fais quelque chose de mal ?

Voici mon code

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

et les deux dernières lignes ont été modifiées pour utiliser instr

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

Mon problème est que j'aimerais utiliser instr au lieu de contain, mais instr me semble beaucoup plus lent que contain.

Était-ce utile?

La solution

CONTAINS utilisera un index Oracle Text, vous vous attendez donc à ce qu'il soit beaucoup plus efficace que quelque chose comme INSTR qui doit lire l'intégralité du CLOB au moment de l'exécution.Si vous générez les plans de requête pour les deux instructions, j'espère que vous verrez que la différence est liée à l'index Oracle Text.

Pourquoi voulez-vous utiliser INSTR plutôt que CONTAINS?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top