- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOracle论文
浅谈Oracle中SQL语句优化
课程:Oracle数据库应用
学号: 20090307134
姓名: 钱国锋
班级: 09软件(1)
指导老师: 王磊
浅谈Oracle中SQL语句优化
SQL语句的主要功能之一是不需要确切地告诉数据库如何获得请求的数据,只需要执行一个查询,指定所需要的信息,然后数据库就会找到最好的方法获得它。一个数据库系统的生命周期可以分成设计、开发和获得成品这3个阶段。在设计阶段进行数据库性能优化,也就是通过优化SQL语句来改进性能,所需要的成本最低,收益最大。SQL语句的优化就是将性能较低的SQL语句转换成达到同样的目的的性能优异的SQL语句。
下面将介绍对于一般的SQL语句的优化技巧。
由于Oracle可以存储更多复杂的数据,这就使得数据的查询效率显得更为重要,低效率的查询给实际应用带来的麻烦是不可估量的。对于DELETE语句、SELECT子句、FROM子句和WHERE子句等都可以进行优化。
在SELECT子句查询表的所有列时,可以使用动态SQL列引用”*”,用来表示表中所有列。使用”*”代替所有的列,可以降低编写SQL语句的难度,减少SQL语句的复杂性,但是却降低了SQL语句执行的效率。
下面通过SQL语句的执行过程,来了解SQL语句的执行效率。当一条SQL语句从客户端进程传递到服务器端进程后,Oracle需要执行如下步骤:
在共享池中搜索SQL语句是否已经存在。
验证SQL语句的语法是否准确。
执行数据字典来验证表和列的定义
获取对象的分析锁,以便在语句的分析过程中对象的定义不会改变。
检查用户是否具有相应的操作权限。
确定语句的最佳执行计划
将语句和执行方案保存到共享的SQL区
首先使用SET TIMING ON语句显示执行时间。然后检索scott用户的emp表,使用”*”来替代所有的列名,执行语句和执行时间如下:
SQLSET TIMING ON
SQLSELECT * FROM scott.emp;
已用时间: 00:00:00.37
在SELECT子句中不使用”*”,而使用具体的列名,执行语句和执行时间如下:
SQLSELECT empno , ename , job , mgr , hiredate , sal , comm , deptno
FROM scott.emp;
已用时间: 00:00:00.26
从执行结果可以看出,第二条语句的执行时间小于第一条语句的执行时间。这是因为Oracle系统需要通过数据字典将语句中的”*”转换成emp表中的所有列名,然后在执行与第二条语句同样的查询操作,这自然要比直接使用列名话费更多的时间。
如果再次执行这两条语句,会发现执行时间减少。这是因为所执行的语句被暂时保存在共享池中,Oracle会重用已解析过的语句的执行计划和优化方案,因此执行时间也就减少了。
在SELECT语句中,使用WHERE子句过滤行,使用HAVING子句过滤分组,也就是在行分组之后才执行过滤。因为行被分组需要一定的时间,所以应该尽量使用WHERE子句过滤行,减少分组的行数,也就减少了分组时间,从而提高了语句的执行效率。
对scott用户的emp表进行操作,根据deptno列进行分组,并使用HAVING子句过滤deptno列的值为10的记录信息。具体如下:
SQLSELECT deptno , avg(sal) FROM scott.emp
GROUP BY deptno HAVING deptno 10;
已用时间: 00:00:00.05
以WHERE子句来代替HAVING子句的使用,可以实现同样的结果,但是执行时间却较少,如下:
SQLSELECT deptno , avg(sal) , FROM scott.emp
WHERE deptno 10 GROUP BY deptno ;
已用时间: 00:00:00.01
虽然WHERE子句与HAVING子句都可以用来过滤数据行,但HAVING子句会在检索出所有记录后才对结果集进行过滤;而使用WHERE子句就会减少这方面的开销。因此,一般的过滤条件应该尽量让WHERE子句实现。
HAVING子句一般用于对一些集合函数执行结果的过滤,如COUNT()、AVG()等。除此之外,一般的检索条件应该写在WHERE子句中。
删除表中的数据可以使用DELETE语句,也可以使用TRUNCATE语句。
其中,使用DELETE语句删除表中所有的数据时,Oracle会对数据逐行删除,并且使用回滚段来记录删除操作,如果用户在没有使用COMMIT提交之前使用ROLLBACK命令进行回滚操作看,则Oracle会将表中的数据恢
您可能关注的文档
- I2013年9月份考试文献检索与应用第三次作业.doc
- IMac下127个常用软件.doc
- [2008年山东高考数学文科试题及答案.doc
- I2013年9月份考试高电压技术第三次作业.doc
- I2013年9月份考试建筑施工技术第二次作业.doc
- I2013年9月份考试供配电系统第三次作业.doc
- I2013年9月护理竞赛复习题.doc
- IMA5626E华为MA5620E产品描述.doc
- I2013年9月翠微中学国防教育课教案.doc
- IMacos应用程序及实用工具简介.doc
- 浙江衢州市卫生健康委员会衢州市直公立医院高层次紧缺人才招聘11人笔试模拟试题参考答案详解.docx
- 浙江温州泰顺县退役军人事务局招聘编外工作人员笔试备考题库及参考答案详解一套.docx
- 江苏靖江市数据局公开招聘编外工作人员笔试模拟试题及参考答案详解.docx
- 广东茂名市公安局电白分局招聘警务辅助人员40人笔试模拟试题带答案详解.docx
- 江苏盐城市大丰区住房和城乡建设局招聘劳务派遣工作人员4人笔试模拟试题带答案详解.docx
- 浙江舟山岱山县东沙镇人民政府招聘笔试模拟试题及参考答案详解1套.docx
- 最高人民检察院直属事业单位2025年度公开招聘工作人员笔试模拟试题含答案详解.docx
- 浙江金华市委宣传部、中共金华市委网信办所属事业单位选调工作人员笔试备考题库及答案详解1套.docx
- 广东深圳市党建组织员招聘40人笔试模拟试题及答案详解1套.docx
- 江苏南京水利科学研究院招聘非在编工作人员4人笔试模拟试题及参考答案详解.docx
最近下载
- 【自考复习资料】28061现代教育技术(复习重点).doc VIP
- JB-TG-NFS3-3030用户手册说明书.pdf VIP
- 《智能超轻型飞行器安全技术评估规范》.pdf VIP
- 全国二卷-2025年高考语文真题作文深度点评与分析(2025.6.7).docx VIP
- 小学数学专题研究自考必备最全知识点 .pdf VIP
- 北京卷:议论文-2025年高考语文真题作文深度点评与分析.docx VIP
- 北京卷(2):记叙文-2025年高考语文真题作文深度点评与分析(2025.6.7).docx VIP
- 持续葡萄糖监测临床应用专家共识 2024.pdf VIP
- 部编人教版八年级语文上册全套测试卷(配2025年秋改版教材).doc
- 2025年高考北京卷语文真题作文记叙文深度点评与分析.docx VIP
文档评论(0)