- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle编程建议
绑定变量
在中,对于一个提交的语句两种可选的解析过程硬解析软解析硬不仅耗费大量的,会重要的闩(latch为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。)资源。
绑定变量是用于替代语句中的常量的替代变量。唯一使得能够重复利用执行计划的方法就是采用绑定变量。绑定变量能够使得每次提交的语句都完全一样。SQL*PLUS一次从数据库获取的行数有效值为1至5000大的值可提高查询和子查询的可获取多行也需要更多的内存当超过1000时其效果不大控制COPY命令提交对数据库修改的批数每次拷贝n批后将提交到目标数据库可用ARRAYSIZE设置一批的大小有效值为0到5000如果置COPYCOMMIT为0则仅在COPY操作结束时执行一次提交数据部分所的extent 空间会被释放释放回收到 minextents个extentNEXT_EXTENT 设置MINEXTENTS 之后的EXTENT,出来的空间可以供其它segment 使用 。表的index 部分会数据删除,extent 部分也被释放,剩下第一个extent 会将HWM 重新设置到第一个Block 的位置(会改变)数据部分所在的extent 空间仅仅数据会被删除数据删除之后的freespace 空间只能供本表使用,以供其它 segment 使用 。index 部分会数据删除,但是保extent 部分会将HWM 重新设置到第一个Block 的位置( 会改变)当使DROP STORAGE时将缩短表和表NEXT 参数。 REUSE STORAGE时不会缩短表或者调整NEXT 参数可以减少对表及数据字典的锁定时间批量绑定(Bulk binds)通过减少PL/SQL和SQL引擎之间的上下文切换(context switches )提高性能批量绑定(Bulk binds)包括:Input collections:使用use the FORALL 语句,用来改善DML(INSERT、UPDATE和DELETE) 操作的性能Output collections:使用BULK COLLECT 子句,一般用来提高查询(SELECT)的性能
用于批量数据,适用于select intofetch into,及DML语句的返回子句bulk collect可以将查询结果一次性地加载到collections中 collection.lower_bound.. collection.upper_bound
index IN INDICES OF collection.lower_bound.. collection.upper_bound
index in values of collection
需要注意的是,FORALL语句中不能使用记录类型的集合变量
%TYPE
在很多情况下,PL/SQL变量是用来存储数据库表中的数据。在这种情况下,变量应该拥有与表列相同的类型。此时,使用“%TYPE”属性而不是将变量类型硬性编码,可以使PL/SQL代码更加灵活,避免数据库更新对PL/SQL代码的影响。
其他
WHERE子句中变量、常量的数据类型要与表列的定义保持一致,这样才能确保正确使用索引。
WHERE子句中使用的表列上应避免使用函数,确保正确使用索引。除非基于该表列建立了函数索引。
处理较大数据的应用应尽量并行。
大数据量表关联查询操作尽量拆分为一系列基于单表的查询语句
基于本地索引(分区)查询分区表时,where条件中必须包含分区键
示例
使用分区索引查询时WHERE条件中必须包含分区项
SELECT COUNT (a.user_id)
FROM bb_device_rent_info_t a, bb_service_relation_t b, bb_customer_info_t c
WHERE a.service_id = :1
AND a.service_kind = :2
AND a.city_code = :3
AND a.user_id = b.user_id
AND b.customer_id = c.customer_id
使用分区索引查询而WHERE条件中不包含分区项时,Oracle将扫描分区表的所有分区,查询符合条件的记录。
SELECT COUNT (a.user_id)
FROM bb_device_rent_info_t a, bb_service_relation_t b, bb_customer_info_t c
WHERE a.service_id = :1
AND a.service_kind = :2
AND a.city_code = :3
AND a.user_id = b.user_id
and b.
文档评论(0)