- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)