Problème de performance avec une variable
Bonjour,
Je fais face à un problème assez inattendu.
Voici une partie de code.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| DECLARE
v_code VARCHAR2 (24);
v_count NUMBER;
BEGIN
v_code := '4.1214';
SELECT COUNT ( * )
INTO v_count
FROM customer cu, contract ca, contract_status cgtf
WHERE cu.code LIKE v_code
AND ca.customer_id = cu.customer_id
AND ca.co_id = cgtf.co_id
AND ch_status IN ('a', 's');
DBMS_OUTPUT.put_line (v_count);
END; |
Et une copie de celui-ci, la seule différence se situe dans le fait que je n'utilise pas de variable, mais la valeur en brut dans la requète
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| DECLARE
v_code VARCHAR2 (24);
v_count NUMBER;
BEGIN
v_code := '4.1214';
SELECT COUNT ( * )
INTO v_count
FROM customer cu, contract ca, contract_status cgtf
WHERE cu.code LIKE '4.1214'
AND ca.customer_id = cu.customer_id
AND ca.co_id = cgtf.co_id
AND ch_status IN ('a', 's');
DBMS_OUTPUT.put_line (v_count);
END; |
Mon soucis est celui-ci. Pour la première requête, le temps d'exécution est de 119 sec, la seconde : 0.015 seconde.
Sachant que cette requête est appelée dans une boucle pouvant aller jusque 30.000 codes, la différence de performance est énorme.
(Notez, j'utilise un LIKE car normalement il y a '%' à la fin, mais je ne l'utilise pas pour l'exemple, le résultat est semblable et n'est donc pas en cause).
Notez aussi que le type VARCHAR2(24) utilisé pour ma variable v_code est le même que celui défini dans la table Customer pour mon cu.code.
Qu'est-ce qui peut causer cela? Quelle serait la solution pour garder autant de performance avec une variable?
Un grand merci d'avance.
Merci à vous.