就目前现状来看,大家有点过分强调绑定变量的作用了。
任何一种优化方法都尤其适用场景,绑定变量技术也不例外。不可盲目的将其信奉为影响性能的罪魁祸首。
1.分清系统是OLTP还是OLAP类型很重要
通常来说,我们把业务分为两类,在线事务处理系统(OLTP)和在线分析系统(OLAP)或者决策支持系统(DSS)。这两类系统在数据库设计上截然不同。比如OLTP系统强调数据库的内存效率,强调内存各种指标的命中率,强调绑定变量,强调并发操作;而OLAP系统则强调数据分析,强调SQL执行时间,强调磁盘I/O,强调分区等。
2.OLTP类型的系统适合大量使用绑定变量技术
OLTP系统是一个数据块变化非常频繁,SQL语句提交非常频繁的系统。对于数据块来说,应尽可能让数据块保存在内存当中,对于SQL来说,尽可能使用绑定变量技术来达到SQL重用,减少物理I/O和重复的SQL解析,从而极大的改善数据库的性能。
3.OLAP系统中使用绑定变量是徒劳的
在OLAP系统中,不需要使用绑定变量(Bind),因为系统中SQL数量和执行频率都很低,SQL语句的分析时间较之执行时间来说可以忽略不计。但是OLAP中可以大量使用位图索引,物化视图,对于大的事务,尽量寻求速度上的优化,没有必要像OLTP那样要求快速提交,甚至要刻意减慢执行的速度。绑定变量真正的用途是在OLTP系统中,这个系统通常有这样的特点,用户并发数很大,用户的请求十分密集,并且这些请求的SQL 大多数是可以重复使用的。
4.小结
以上从理论层面解析了绑定变量的适用场景。希望给大家在日常优化过程中有些指导。请大家避免盲目调优带来的窘境