因为绑定变量后不知道变量的具体值,会影响优化器的执行计划,看这个例子:
表中有10000行列a的值从1-10000
SQL> variable id number;
SQL> execute :id :=9;
SQL> select * from t where a<:id;
| 0 | SELECT STATEMENT | | 500 | 13000 | 3 (0)|
| 1 | TABLE ACCESS BY INDEX ROWID| T | 500 | 13000 | 3 (0)|
|* 2 | INDEX RANGE SCAN | I | 90 | | 2 (0)|
SQL> execute :id :=9000;
SQL> select * from t where a<:id;
| 0 | SELECT STATEMENT | | 500 | 13000 | 3 (0)|
| 1 | TABLE ACCESS BY INDEX ROWID| T | 500 | 13000 | 3 (0)|
|* 2 | INDEX RANGE SCAN | I | 90 | | 2 (0)|
1、当处理的数据比较小,解析时占响应时间比重比较大时,就要尽量避免硬解析,所以最好使用绑定变量
2、当处理的数据比较大,全表扫描时间占响应时间比较大时,就要尽量避免全表扫描,就尽量别用绑定变量,因为绑定变量会影响优化器的优化,增大全表扫描的可能性