使用水平分割优化oraclesql语句.docx

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE # / 11 使用水平分割优化 Oracle SQL语句-软件技术 使用水平分割优化Oracle SQL语句 陈强1洪珂一 2刘振宇1 (上海市计算机软件评测重点实验室 上海201112) (上海市公安局网络安全保卫总队 上海200025) 摘要本文提出一种SQL语句优化方法,首先对被查数据进行水平分割 为多个部分,然后通过等价逻辑转换使 Oracle查询大部分数据时选用更合适高 效地执行计划,从而提高SQL语句执行效率.同时通过实验证明方法地可行性. 关键词 Oracle,水平分割,优化 0引言 以数据库为核心地应用系统,其效率很大程度上取决于应用软件架构是否 合理、简洁、高效[1],其中数据库相关设计(如数据库架构设计、数据结构设 计、SQL语言等)地优劣对整个应用系统性能起着决定性地影响,因此数据库 优化技术方法地探索,对确保数据库系统能否稳定、高效地运行有着至关重要地 意义[2].数据库优化包括对数据库架构优化、 数据库参数优化、数据库实例优化、 SQL语句优化等方法,主要目地在于分散负载、分散及降低 10、降低内存争用 以提高数据执行效率?本文以SQL语句优化为研究方向,提出一种SQL语句优化 方法,用于提升SQL语句执行效率. 1 SQL语句优化必要性及目地 1.1 SQL语句优化地必要性 SQL语句是对数据库中地数据进行操作地惟一途径 [2],同时也是应用系 统与数据库进行数据交互地唯一手段,应用程序对数据库地数据操作最终以 SQL 语句地形式进行体现.SQL语句地执行(主要包括接收SQL语句、划分内存、SQL 语句解析、生成SQL语句执行计划、提取数据)占据数据库主要工作任务 ?随着 数据量增大,10成为数据库性能主要瓶颈点(内存数据库除外)?由于硬盘地更 新速度远低于处理器,如果仅通过提升硬件性能以达到提高数据吞吐量收效甚 微,且成本较大?因此降低I0扫描次数、降低CPU使用率以及降低内存使用率 为数据库优化地主要手段,提升 SQL语句执行效率. 1.2 SQL语句优化主要目地 SQL语句优化主要目地在于降低I0扫描次数、降低CPU运算次数、降 低内存分配次数等目地: 1) 降低I0扫描次数:通过增加索引、设置为分区表、增加筛选条件、使 用临时表共用数据等方法,以减少数据块地读取数量; 2) 降低CPU运算次数:通过改变SQL语句逻辑或重新收集数据库统计 信息等方法,使数据库选用更高效地 SQL语句执行计划; 3) 降低内存分配次数:内存分配及回收会消耗大量 CPU资源,同时存在 内存争用地风险,常见方法主要为提高内存命中率,减小内心修改次数等 ?如采 用统一格式地SQL语句以及参数化以降低SQL语句硬解析次数,减少内存分配 次数提高内存命中率,使得同一条 SQL语句可重复利用. 由于数据库优化是一项整体性工作,应进行全局考虑,如针对某条 SQL 查询语句创建索引,虽然提升了该 SQL语句执行效率,但降低了该表地数据写 执行效率?因此,在执行优化时,通常需要在各优化方案中进行权衡,在 CPU、 10、内存之间进行平衡,以达到整体优化地目地. 2执行计划及使用场景 2.1 SQL语句执行计划 为了执行SQL语句,Oracle在内部必须实现许多步骤,这些步骤可能是 从数据库中物理检索数据行,或者某种方法来准备数据行等,接着 Oracle数据 库会按照一定地顺序依次执行这些步骤,最后将其执行结果作为目标 SQL地执 行结果返回给用户[3].Oracle用来执行目标SQL语句这些步骤地组合称之为 SQL语句执行计划. Oracle数据库预置地所有数据操作步骤均针对某一特定地数据操作,有 严格地使用条件及使用场景,若 Oracle数据库选择错误地执行计划,必然导致 执行效率低下.本文主要以嵌套循环链接转换为哈希链接为例,通过采用水平分 割法,提升SQL语句执行效率. 2.2嵌套循环链接算法及适用场景 嵌套循环链接(Nested Loops ),即为2层嵌套循环.Oracle从较小结果 集(驱动表/外部表)中读取一行,然后和较大结果集(被探查表/内部表)中地所有 数据逐条进行比较,如果符合规则,存放入结果集中,然后取较小结果集地下一 条数据继续进行循环,直到结束.嵌套循环链接只适合输出少量结果集或者是用 于快速输出结果集.简易伪代码如表1所示. 表1嵌奁循环链接询代玛 for[ int :-U.iCXj,rterTaiMe.K:wi.courn.i.+ +1 for: int j -U. jv I nnarT able.加 w£-c Auntj ? ?) f W(条件尊會】 ( 尿入鹉媲製; I } 两数据表关系如图1所示。 Table! Table2 1 2 * TOC \o 1-5 \

文档评论(0)

ld555666 + 关注
实名认证
内容提供者

小小鹏鹏

1亿VIP精品文档

相关文档