平台人生
作者平台人生·2016-11-18 12:06
软件开发工程师·平台人生

Oracle开发建议系列第二期 ——绑定变量的使用建议

字数 762阅读 4137评论 0赞 0

作者:周鹏

绑定变量的作用

在Oracle中,存在两种解析过程,一种叫硬解析,一种叫软解析。当一个SQL语句提交,Oracle会首先检查shared pool里有没有完全相同的语句,如果有,只需执行软解析即可,否则需进行硬解析。大量硬解析不仅消耗CPU资源,还经常导致Oracle内部latch等资源争用,引起严重的性能问题,所以尽可能使用软解析是Oracle开发的基本要求。

通过使用绑定变量,不同session提交的SQL数据库会识别为同一个SQL,可以使用共享的SQL执行计划,就不必每次进行硬解析编译,有助于降低CPU的使用,避免资源的争用,便于SQL的管理、优化。

有图有真相

下面用一个简单实验,直观来看一下使用绑定变量和不使用绑定变量的状况:

通过实验结果看出,使用绑定变量要比未使用绑定变量SQL执行时间相差了好几个数量级。当然,硬件配置不同,执行结果有所差异。

绑定变量使用建议

(1)OLTP系统尽量使用绑定变量
OLTP系统中,SQL语句重复执行频度高,但处理的数据量较少,结果集也相对较小,尤其是使用表上的索引来缩小中间结果集,其解析时间通常会接近或高于执行时间,因此该场合适合使用绑定变量

OLAP系统中,SQL语句执行次数相对较少,但返回的数据量较大,因此多数情况下倾向于使用全表扫描更高效,其SQL语句执行时间远高于其解析时间,因此使用绑定变量对于总响应时间影响不大。而且增加生成低效执行计划的风险。即在在OLAP系统中使用字面量的性能高于使用绑定变量。

(2)SQL过滤条件中该字段的输入值非常多,分布通常较为均匀,常见如:账户号、姓名、时间等字段,这类SQL必须使用绑定变量。

(3)SQL过滤条件中该字段的输入值可变范围较小,且分布很不均匀,常见如:多法人实体、状态、类型等字段。这类SQL尽量不要使用绑定变量。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

相关资料

X社区推广