可以看到最后一次执行查询后,硬解析没有增加。这就是绑定变量的作用。
在这里只能使用绑定变量,不能使用普通变量。绑定变量是Oracle的一种特殊变量,对它赋值的过程,是在Oracle优化器解析过语句之后,解析语句的任务就是确定语句的执行计划。当使用绑定变量后,优化器在解析语句时,解析的是“select * from tab1 where id=:user_id”,而不是“select * from tab1 where id=5;”。优化器将按照“select * from tab1 where id=:user_id”确定语句的执行计划,而不是“select * from tab1 where id=5”。在解析过语句已经确定了语句的执行计划后,优化器将执行计划交给服务器进程去执行时,再用实际的值替换绑定变量。如果你使用普通的变量,Oracle优化器将在解析前用变量的值替换变量,这样在解析语句、生成执行计划时,优化器看到的语句就是“select * from tab1 where id=4”或“select * from tab1 where id=5”等等,因为它们的文本不同,优化器将选择重新为它们生成执行计划。而不是取出已经存入库缓存的执行计划直接执行。
Oracle性能优化 之 库缓存[续] http://www.2cto.com/database/201202/120552. html
本文出自 “叶绍琛” 博客