Performances Oracle DBMS_LOB.INSTR et CONTAINS
-
13-11-2019 - |
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.
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