同一功能同一性能不同写法 SQL 的影响
如一个 SQL 在 A 程序员写的为
Select * from zl_yhjbqk
B 程序员写的为
Select * from dlyx.zl_yhjbqk(带表所有者的前缀)
C 程序员写的为
Select * from DLYX.ZLYHJBQK(大写表名)
D 程序员写的为
Select * from DLYX.ZLYHJBQK(中间多了空格)
以上四个 SQL 在 ORACLE 分析整理之后产生的结果及执行的时间是一样的,但是从
ORACLE 共享内存 SGA 的原理,可以得出 ORACLE 对每个 SQL 都会对其进行一次分析,
并且占用共享内存,如果将 SQL 的字符串及格式写得完全相同则 ORACLE 只会分析一次,
共享内存也只会留下一次的分析结果,这不仅可以减少分析 SQL 的时间,而且可以减少共
享内存重复的信息, ORACLE 也可以准确统计 SQL 的执行频率。
不同区域出现的相同的 Sql 语句要保证查询字符完全相同, 建议经常使用变量来代替常量,
以尽量使用重复 sql 代码, 以利用 SGA 共享池, 避开 parse 阶段,防止相同的 Sql 语句被
多次分析,提高执行速度。
因此使用存储过程,是一种很有效的提高 share pool共享率,跳过 parse 阶段,提高效率的
办法。
Select * from zl_yhjbqk
B 程序员写的为
Select * from dlyx.zl_yhjbqk(带表所有者的前缀)
C 程序员写的为
Select * from DLYX.ZLYHJBQK(大写表名)
D 程序员写的为
Select * from DLYX.ZLYHJBQK(中间多了空格)
以上四个 SQL 在 ORACLE 分析整理之后产生的结果及执行的时间是一样的,但是从
ORACLE 共享内存 SGA 的原理,可以得出 ORACLE 对每个 SQL 都会对其进行一次分析,
并且占用共享内存,如果将 SQL 的字符串及格式写得完全相同则 ORACLE 只会分析一次,
共享内存也只会留下一次的分析结果,这不仅可以减少分析 SQL 的时间,而且可以减少共
享内存重复的信息, ORACLE 也可以准确统计 SQL 的执行频率。
不同区域出现的相同的 Sql 语句要保证查询字符完全相同, 建议经常使用变量来代替常量,
以尽量使用重复 sql 代码, 以利用 SGA 共享池, 避开 parse 阶段,防止相同的 Sql 语句被
多次分析,提高执行速度。
因此使用存储过程,是一种很有效的提高 share pool共享率,跳过 parse 阶段,提高效率的
办法。
原出处不详