欢迎来到天天文库
浏览记录
ID:37712951
大小:246.00 KB
页数:16页
时间:2019-05-29
《Oracle编程建议》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、绑定变量在Oracle数据库管理系统中,对于一个提交的SQL语句,有两种可选的解析过程:硬解析和软解析。当我们提交了一个SQL语句后,Oracle会在librarycache中查询是否存在完全相同的语句。如果存在相同的语句,则执行软解析,使用已有的解析树和执行计划。如果不存在相同的语句,则执行硬解析,需要对语句进行解析,创建解析树,生成执行计划。硬解析不仅耗费大量的CPU资源,而且会占用重要的闩锁(latch,为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。)资源。绑定变量是用于替代SQL语句中
2、的常量的替代变量。唯一使得Oracle能够重复利用执行计划的方法就是采用绑定变量。绑定变量能够使得每次提交的SQL语句都完全一样。值得注意的是,Oracle会自动将过程、函数、包中语句使用的变量作为绑定变量处理,我们需要特别关注C、JAVA、PHP等语言编写的外部应用,以及动态SQL语句。COPY命令的相关参数设置ARRAYSIZE参数该参数用于设置SQL*PLUS一次从数据库获取的行数,默认值为15,有效值为1至5000。较大的值可提高查询和子查询的性能,可获取更多的行,同时也需要更多的内存。当超过1000时,其效果
3、不大。COPYCOMMIT参数该参数控制COPY命令提交对数据库修改的批数。即每次拷贝n批后,将提交到目标数据库。可用ARRAYSIZE参数设置一批的大小。COPYCOMMIT参数的默认值为0,有效值为0到5000。如果置COPYCOMMIT为0,则仅在COPY操作结束时执行一次提交。TRUNCATETABLEDROPSTORAGE数据部分所使用的extent空间会被释放(释放回收到minextents个extent,NEXT_EXTENT设置MINEXTENTS之后的EXTENT),释放出来的空间可以供其它segme
4、nt使用。表的index部分会数据删除,extent部分也被释放,剩下第一个extent。会将HWM(高水平线)重新设置到第一个Block的位置(HWM会改变)。REUSESTORAGE数据部分所在的extent空间不会被回收,仅仅数据会被删除,数据删除之后的freespace空间只能供本表使用,不可以供其它segment使用。index部分会数据删除,但是保留extent部分。会将HWM重新设置到第一个Block的位置(HWM会改变)。当使用DROPSTORAGE时将缩短表和表索引,并重新设置NEXT参数。使用REU
5、SESTORAGE时不会缩短表或者调整NEXT参数,可以减少对表及数据字典的锁定时间。应当注意的是DROPSTORAGE是TRUNCATETABLA语句的默认选项,当我们要整理表的碎片时,应使用REUSESTORAGE选项。批量操作批量绑定(Bulkbinds)通过减少PL/SQL和SQL引擎之间的上下文切换(contextswitches)提高性能。批量绑定(Bulkbinds)包括:²Inputcollections:使用usetheFORALL语句,用来改善DML(INSERT、UPDATE和DELETE)操作的
6、性能²Outputcollections:使用BULKCOLLECT子句,一般用来提高查询(SELECT)操作的性能BULKCOLLECT子句用于批量取得数据,适用于selectinto、fetchinto,及DML语句的returninginto返回子句。批量查询BULKCOLLECT使用bulkcollect可以将查询结果一次性地加载到collections中。FORALL语句²indexINcollection.lower_bound..collection.upper_bound²indexININDICESO
7、Fcollection.lower_bound..collection.upper_bound²indexinvaluesofcollection需要注意的是,FORALL语句中不能使用记录类型的集合变量%TYPE在很多情况下,PL/SQL变量是用来存储数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。此时,使用“%TYPE”属性而不是将变量类型硬性编码,可以使PL/SQL代码更加灵活,避免数据库更新对PL/SQL代码的影响。其他WHERE子句中变量、常量的数据类型要与表列的定义保持一致,这样才能确保正确使
8、用索引。WHERE子句中使用的表列上应避免使用函数,确保正确使用索引。除非基于该表列建立了函数索引。处理较大数据的应用应尽量并行。大数据量表关联查询操作尽量拆分为一系列基于单表的查询语句基于本地索引(分区)查询分区表时,where条件中必须包含分区键示例使用分区索引查询时WHERE条件中必须包含分区项SELECTCOUNT(a.u
此文档下载收益归作者所有