pour les perf, ça dépend, utiliser une bind variable ou un curseur partagé peut avoir des effets négatifs, surtout en datawarehouse, par exemple tu faire
et bien si 0% ou 99% des employés sont dans le departement 40, ça change tout. De bons histogrammes et des littérals, c'est parfois mieux. Il existe aussi dans les versions récentes une valeur de SIMILAR, qui peut profiter des histogrammes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from emp where deptno=40;
Pour les effets pervers, rien ne vaut une petite démo !
si la 2e requête retourne des colonnes de 1 caractère, ce n'est pas le cas dans la 1e. Bon, j'ai emprunté cet exemple à tom kyte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 SQL> alter session set cursor_sharing='FORCE'; Session altered. SQL> select substr(DNAME,1,1), substr(LOC,1,1) from dept; SUBSTR(DNAME,1 SUBSTR(LOC,1, -------------- ------------- A N R D S C O B SQL> alter session set cursor_sharing='EXACT'; Session altered. SQL> select substr(DNAME,1,1), substr(LOC,1,1) from dept; S S - - A N R D S C O B
Mais globalement, cursor_sharing est un remède (très efficace j'en conviens )contre une mauvais utilisation des binds, et pas un paramètre a utiliser dans toutes les situations.
Il y a sans doute d'autres effets pervers, avec d'autres interfaces que sqlplus.
A+
Laurent
Partager