在9i和10g中,存在绑定变量窥测功能。
有一张表存在id字段,该id字段从100递增至10000.在id字段上存在索引。
如下sql:
execute :n := 200;
select * from t where t.id < :n;
这时,会启用绑定变量窥测功能,查询优化器检测到绑定变量的值,决定走索引还是全表扫描。显然这时会走索引。
execute :n :=90000;
select * from t where t.id < :n;
这时返回的记录占全部的90%,通常情况下优化器会进行全表扫描,但是由于sql语句是绑定变量的,因此沿用了第一次执行时的计划,走了索引。
也即是说,如果执行多次绑定变量的sql语句,绑定变量窥测只在开头执行一次,之后优化器沿用第一次的执行计划。
到了11g有了绑定变量窥测扩展。尚未研究过。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16591471/viewspace-708490/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/16591471/viewspace-708490/