Oracle 的 SQL 语句共享机制,讲真,挺讲究“抠细节”的。语句得一模一样,连空格和大小写都不能差一点点。不然,你想复用?门都没有。还有,对象得一样,绑定变量也要名字对上,换个名字系统都当你是陌生人。

字符级匹配的限制,算是 Oracle 优化里的老规矩了。比如:SELECT * FROM ATABLE;SELECT *from ATABLE,虽然看着差不多,其实完全不能共享。执行的时候,每一条都会进库,压力也就上来了。

而绑定变量这块,能写对还是挺关键的。像pin = :blk1.pinpin = :blk1.ot_jnd,变量名一变,Oracle 直接不给你复用。共享池就像一把筛子,语句稍微不标准,就被筛掉了。

想写出共享率高的 SQL,有几个小建议:1)写 SQL 的时候规范点,别乱改格式;2)绑定变量尽量统一命名;3)别搞那些看起来一样其实不一样的“伪共享”。

想深入了解?我挖了几个还不错的参考,有时间可以看看:绑定变量和共享游标优化 Oracle SQL 性能优化 Oracle SQL 语句以实现共享池效果,还有这个比较全的Oracle SQL 性能优化:共享 SQL 语句

如果你最近在做 SQL 调优,或者项目里共享池老是爆,不妨先检查下是不是语句不规范。小细节搞好了,性能提升还挺的。