应用使用绑定变量后执行计划是否会随SQL语句变量值而变化

当应用程序使用绑定变量后,通过snap看到的SQL语句where部分都是一些变量,如果表之前收集过分布的统计信息,这种情况下SQL的执行计划是否会随着不同的变量值而变化?在oracle中使用绑定变量可以减少SQL语句的硬解析,SQL语句的执行计划一般不会随变量值而变化,DB2是什么情况?

参与9

2同行回答

leilinleilin数据库管理员IBM
使用绑定变量的情况下,缺省情况下DB2执行计划将保持不变,这有助于稳定执行计划并改善性能,特别是对于典型OLTP系统SQL相当简单的场景效果明显。在OLAP系统中,SQL往往比较复杂,如果用绑定变量的方式,SQL编译时无法确定绑定变量具体的值,往往就会出现执行计划不是最优的情况。对于...显示全部

使用绑定变量的情况下,缺省情况下DB2执行计划将保持不变,这有助于稳定执行计划并改善性能,特别是对于典型OLTP系统SQL相当简单的场景效果明显。在OLAP系统中,SQL往往比较复杂,如果用绑定变量的方式,SQL编译时无法确定绑定变量具体的值,往往就会出现执行计划不是最优的情况。对于这种情况,DB2提供了静态包绑定优化选项:

db2 rebind package reopt once|always

对于once的情况,DB2将根据第1次执行package时传入的绑定变量具体值生成执行计划并固定下来;对于always的情况,每次执行package时DB2均会根据实际传入的绑定变量值生成新的执行计划。对于OLAP系统来讲,编译时间通常远小于执行时间,每次编译代价不大;当然,对于OLTP系统来讲,每次生成新的执行计划就不划算了。

收起
IT其它 · 2017-05-09
浏览1657
  • 使用绑定变量的情况下,对某张表重新收集了统计信息,相关的SQL再次执行的时候会重新生成执行计划吗?
    2017-05-10
  • leilin  leilin回复 icycastle
    只是搜集统计信息不重新绑定package,执行计划不会变。
    2017-05-10
  • 在线系统,收集统计信息后怎么才能生成新的执行计划?
    2017-05-11
daolin2005daolin2005数据库管理员某城商行
雷总说的对。显示全部

雷总说的对。

收起
软件开发 · 2017-05-10
浏览1624

提问者

icycastle
数据库管理员某证券公司

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-05-09
  • 关注会员:2 人
  • 问题浏览:4549
  • 最近回答:2017-05-10
  • X社区推广