一、绑定变量 使用绑定变量可以减少Oracle对语句的硬分析,加快语句的执行。
样例程序:VB
没有使用绑定变量执行1000次 Insert 命令耗时 8.36 秒
使用绑定变量执行1000次 Insert 命令耗时 2.56 秒
使用绑定变量的速度为不使用绑定变量的 30%,如果在大量用户集中执行此命令的情况下,效果更加明显。
为什么使用绑定变量可以加快数据?
1、减少了Oracle对语句的分析。Oracle可以在缓存中直接使用上次已分析过的语句。
2、不需要对语句执行查询路径分析。直接使用上次的查询路径。
开发中注意事项:
1、编码变得烦琐,但为了以后没有人找你麻烦,还是烦琐一些好!
2、RDO 使用 rdoQuery 对象,ADO使用 Command 对象。Java 使用 PreparedStatement。各种开发语言均有此类对象。
二、正确使用索引 语句 执行时间
错误 SELECT *
FROM xxy x
WHERE x.编号=1000000019 1.515秒
错误 SELECT *
FROM xxy x
WHERE upper(X.编号)='1000000019' 1.64秒
正确 SELECT *
FROM xxy x
WHERE x.编号='1000000019' 0.062秒
正确的语句与错误语句有何不同之处?
此例说明Oracle的隐式转换数据功能可能误导开发员,使开发员写出蹩脚的SQL语句。
开发中注意事项:
1、 正确使用索引字段,并要注意查询语句中的关键字类型与数据库中索引字段的字段类型一致。
2、 不要在索引上使用函数。
3、 尽可能不使用Like、Is Null语句,而使用 >、< 代替。
三、 FROM语句 语句执行时间
错误 SELECT *
FROM d_fs fs,djb dj,xxyb xxy
WHERE dj.方式=fs.方式
AND fs.类型='什么类型'
AND dj.编号=xxy.编号 24.844秒
正确 SELECT *
FROM djb dj,xxyb xxy,d_fs fs
WHERE dj.方式=fs.方式
AND fs.类型='什么类型'
AND dj.编号=xxy.编号 4.453秒
Oracle的优化方式分为基于成本和基于规则的优化方式。
在使用基于规则的优化方案的时候,应将记录数小的表写在FROM语句的后面。
四、 EXISTS、NOT EXISTS 尽量不使用 In、Not In,而使用 Exists、Not Exists代替。
语句 执行时间
错误 SELECT *
FROM cfxb xd
WHERE xd.日期 BETWEEN SYSDATE-30 AND SYSDATE
AND xd.编号 NOT IN (SELECT zb.编号
FROM cfzb zb) 3.281秒
正确 SELECT *
FROM cfxxb xd
WHERE xd.日期 BETWEEN SYSDATE-30 AND SYSDATE
AND NOT EXISTS (SELECT 1
FROM cfzb zb
WHERE zb.编号=xd.编号) 0.172秒
刚开始使用Exists语句不如In语句直观,大家习惯一下就可以了。
五、 其它事项 a) 在select、insert语句中不允许使用 * 代替所有字段,应明确指定字段名称。
b) SQL语句中使用到多个表,应在select语句中明确使用表别名引用表中的字段。