基Oracle数据库的几种常见SQL优化策略

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:gcj820305
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:针对当前较为常见的Oracle数据库应用,尤其是数据体量越来越大的现状下,文章提出了几种切合实际应用的优化方式,在一定程度上提高了SQL语句的执行效率,极大地加快了数据的查询检索等操作,充分实现了优化的目的。
  关键词:oracle;数据库;SQL语句;查询;优化
  中图分类号:TP311.13 文献标识码:A 文章编号:1009-3044(2018)08-0012-02
  随着大数据、物联网等概念的兴起,关于数据的分析应用逐步从后台走向了前台,生活中各类的软件开发、终端应用都离不开背后支撑整个环境的数据本身,动辄上亿甚至百千亿级别的数据亦不罕见,面对如此庞大的数据量,效率“二字”也被提升上了一个空前的高度之上。作为目前使用最为广泛应用的SQL数据库语句,如何对其做性能优化,提升工作效率,去促成更强的决策能力、洞察力与最优化处理,成为信息产业所有人聚焦的核心。本文从Oracle常用的SQL入手,结合工作教学,指出了几种常见的性能优化方式。
  1引言
  就目前而言,Oracle先天存在的跨平台、可伸缩并行、分布式计算等特性都良好的适配了当前大数据的背景,其应用范围也在逐渐扩大,对应的数据体量和复杂度也不断增加,提高数据库的处理性能只能依靠硬件资源的升级换代和SQL语句的优化,相比之下,SQL的语句优化贯穿持续整个软件运行周期,其必然性不言而喻。
  2 SQL语句优化的原则
  从程序开发角度来看,对于Oracle数据的操作是通过SQL语句来实现的,其数据的精炼程度,直接决定了交互的效率,是提高整个数据库性能的最立竿见影且成本最低的方式。优化的原则就是从成本人手,减少数据访问量、减少交互次数,从而返回更少的数据,达到减少CPU和内存开销,最终增加可用资源,即漏斗原则。
  3 Oracle数据库中常见的优化策略
  1)合理的创建和使用索引
  根据表的大小和使用率来创建索引,作为数据库管理员来说,索引一样使用系统开销,并非所有的表都需要创建索引,为合适的表创建索引而非为所有的表创建索引。一般来说不需要为比较小的表创建索引,因为即使创建了索引,其性能并没有得到改善,反而要付出建立索引的开销和维护成本,得不偿失。而对于较大的表,要首先分析表中需要查询的数据量,若经常需要查询的数据不超过15%,则创建索引的必要性就需要斟酌了,15%只是实际的一个经验数据,也可以测试一下全表查询的时间,和建立索引相对比时间是否缩短,来评估索引是否建立的必要性。
  按照经验来说,索引可以提高Oracle数据库的查询效率,但数据库进行更新时,包括增加、删除、改写等,都会对索引进行更新,当索引越多时,占用资源的开销就会越大,需要在两个之间寻求一个平衡点。原则上当表的记录更新为主时,不要见太多索引,当表数据需要频繁调用时,则需要比较多的索引。
  2)大数据量查询记录数优化
  在目前大数据的背景下,以亿为单位数据时常遇到,一般数据库操作人员习惯使用Count(*)来统计表的记录数,Count命令执行的是Table Full Scan,也就是全表扫描,会占用极大地资源开销。实际上,无论是否建有索引,都应该使用sysindexes来进行查询,可以很快的返回结果。
  3)尽量避免通配符首位出现
  当通配符(%)在搜索词的首位出现时,Oracle将不适用数据表的索引,虽然很多情况下我们无法避免此类情况,但要慎重执行,通配符首位出现时会降低查询的效率。例如我們在sample表中查询包含“子”的人,通常采用:
  Select*from sample where sample_name hke‘%子%’;
  此时索引无法被利用,但当通配符出现在其他位置时,就可以利用索引,例如:
  Select*from sample where sample_name hke‘李%’;
  4)尽量使用UNION ALL代替UNION命令
  UNION执行的是表连接并去重复的操作,包含了多表的连接、结果集的排序、重复数据的剔除,而在实际的运用场景下,尤其是已经确定了主键的表,并不会产生重复的数据,应尽可能地使用UNION ALL代替UNION来进行操作,直接对多表进行合并操作,节约不必要的资源开销,尤其是大数据量的操作时。
  5)用MERGE改写UPDATE子查询
  MERGE命令是Oracle9i及以后版本新增的命令,其字面上的意思就是合并、兼并,用来合并UPDATE和INSERT语法。通过MERGE命令,根据一张表或子查询的连接条件对另外一张表进行查询,当连接条件匹配的时候进行数据更新,执行UP-DATE操作,无法匹配时为这个表新增一条数据,执行INSERT操作。这个命的执行效率远高于INSERT UPDATE,仅进行一次全表扫描就完成了所有工作。例如:
  MERGE INTO Target AS A
  USING Source AS B
  ON A.aac002=B.aac002
  WHEN MATCHED——-当aac002匹配时,目标表进行数据更新
  THEN UPDATE SET A.aac001=B.aac001
  WHEN NOT MATCHED——-当目标表未查询到,在原表有的则进行插入
  THEN INSERT VALUES(A.aac002,B.aac001)
  WHEN WHEN NOT MATCHED BY SOURCE——目标表存在,而原表不存在时进行查询
  THEN DELETE
  即简洁完整的执行了一系列更新、插入、删除的操作,又相比传统的UPDATE和INSERT极大地提高了效率。   6)习惯使用COMMIT命令
  当执行数据操纵语言之后,尽可能地多使用COMMIT命令进行提交操作,对占用的rollback回滚记录进行释放,以释放资源提高整体性能,即释放以下开销:
  ①回滚段上用于恢复数据的记录信息;
  ②被程序语句获得的锁;
  ③redo log buffer中的占用的空间;
  ④ORACLE为管理上述3种资源占用的内部开销。
  7)尽量使用WHERE代替HAVING语句
  尽可能地减少HAVING语句的使用范围,在一个完整的SELECT语句中ON最先执行,其次是WHERE,再次是聚合函数计算,最后才是HAVING和排序操作等,如果能在HAVING的前置环节限制检索的数据量,就可以减少之后的分组运算开销,即在分组之前过滤数据。综合来看,一类是WHERE语句和HAVING语句同时存在的SQL语言,通过WHERE字句限制数据记录的数量,减少后续聚合运算、分组筛选、排序操作的资源开销。另一类是WHERE字句和HAVING字句都可以实现的SQL语句,应该直接使用WHERE字句代替HAVING字句,此时在筛选排序之前就先行进行了过滤,效率远高于HAVING字句,例如同样两个语句:
  8)增加执行命令的重复使用率
  SQL语句执行完毕后会驻留在高速缓存中,多数时候命令的执行具有重复性,要尽量保证同一功能SQL语句的一致性,尽量确保重复执行时直接调用驻留在高速缓存中的执行计划。在某些大数据平台上,一些基础的SQL语句每秒钟会重复执行上千次,重复调用执行计划可以大大的提高资源使用效率,建议一是使用对象(如表和视图)的完全合法一致的名称,二是在应用程序中规范使用变量,最大限度保持全局一致,提高重復使用率。
  4借助优化软件或者购买服务进行SQL优化
  无论人工优化还是机器软件优化,其目的都是为了更高的提高效率,相比较人工而言,高速发展的人工智能可以无疲劳、不间断的进行各种语句性能比较,找到最优的路径,未来的SQL优化也将逐步实现智能化的优化方式。
  例如SQL Turning、SQLExpert更优化软件,以及Tkprof等跟踪软件,都是为了采用机器或者量化的方式进行语句的优化,使得原本枯燥的语句分析变得更加直观。而对于一些实力略显不足的开发者而言,购买第三方服务也不失为一个选择,甚至随着分工的精细化,在大数据的产业链中,会衍生围绕优化的服务产业并蓬勃发展。
  5结束语
  其实关于Oracle的SQL语句优化是一个复杂的过程,上述的一些心得仅仅是应用层的一些表现,关于数据库的运维还涉及底层的资源分配、网络层的流量控制和操作系统的构架,甚至相同的平台的不同类型数据,其优化方式的原则都要随之改变,而不是教条式的简单修改,作为我们使用者而言,应该多加探索,借助优化软件、跟踪分析,加以人工辨别,找到一个适合自己的行之有效优化方式。
其他文献
摘要:2017年1月微信小程序正式上線。和传统的原生App相比较,小程序能实现其基本功能,但又有所区别。为了让更多人了解两者之间的区别,在应用开发上做出更精致的选择,在本文中将以安卓原生App为例来对两者进行比较,从而分析两者间的区别。首先通过介绍两者的技术差异,进一步对比总结出两者在功能实现方式上的区别,再对其优劣、市场等方面做出分析,最终总结出两者未来的发展趋势,以供开发者更好地选择。  关键
摘要:随着城市人口的不断增加,尤其是私家车的快速发展,城市交通拥堵问题日益凸显,已成为提升城市品质的难题之一。该文在具体分析盐城城市交通基础信息资源利用现状的基础上,就如何合理应用城市交通拥堵指数,缓解城市拥堵等问题进行了有益的探讨。  关键词:城市交通;拥堵; 指数;应用;分析  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2018)04-0223-02  1 研究背景
摘要:翻转课堂作为一种全新的教学模式在提高了学生学习主动性的同时,还培养了其自主学习探究的能力,非常适合中职教学。文章首先分析了翻转课堂在中职学校计算机专业课程《CINEMA 4D》教学中的优势,然后以《CINEMA 4D》课程为例,探讨基于翻转课堂的教学模式在教学过程中的具体应用,包括学习任务单的制定、自主学习环境的构建、资源和任务发布、协作学习、成果展示等环节。  关键词:翻转课堂;中职教学;
摘要:信息技術的发展为我国的农业转型带来了机遇和挑战,“互联网 ”为现代农业信息化建设提供了新路径和方法。针对农业信息化中建设项目分散、条块分割、投资主体不明确,发展内生动力不足问题,提出一种基于互联网 020电子商务平台的农业信息化建设框架。该框架以线上线下电子商务平台为核心网络,吸引农业信息化利益相关方逐步扩展农业金融、智能化生产、网络经营、农业管理及第三方服务等应用。  关键词:农业信息化;
摘要:从传统教室到多媒体教室,技术的加入使得广大教育者创造了更多的教学方法,这些创新提高了教学水平。伴随5G时代,高可靠互联网等新技术的加入,为响应国家对于教育教学的宏观规划和逐步实现我校师生日新月异的教学学习需求,为探索适合我校“智慧教室”建设模式,本文以西安工程大学多媒体教室升级改造为契机,通过“智慧化”系列改造和推广活动,使改造后的教室满足了开展混合式教学、翻转课堂、PBL教学的需求,降低了
摘要:本设计由特定摄像头作为颜色识别系统,采用两机械臂的操作方式,以机械爪作为操作设备,对魔方进行还原的操作。机械控制作为解魔方机器人的核心模块之一,是机械结构与算法的桥梁。  关键词:Arduino单片机;魔方算法;机器人  中图分类号:TP302 文献标识码:A 文章编号:1009-3044(2018)17-0267-02  机器人技术的不断发展与进步,可以说是各项科学技术共同发展所得到的一个
摘要:随着教育制度的不断发展与成熟,传统教学模式的弊端日益显现。本文以EEG监测技术为例,针对传统教学中存在的问题,提出人工智能技术在教育教学中的应用与实践研究。通过EEG注意力监测技术在教育教学中的引入、应用及发展,使教学方案得到有效的改进,教学质量得到大幅度提升,为高校的教学改进提供新思路与新方法,解决现阶段存在的问题。  关键词:人工智能; EEG注意力监测;教育教学  中图分类号:G304
摘要:慕课(MOOC),即大规模开放在线课程,是一种新兴的在线课程开发模式。该文在分析Kerberos认证协议的基础上,讨论了传统课堂在对学生讲授Kerberos协议中存在的难点问题,通过将慕课教学模式在Kerberos认证协议教学中进行应用的案例,进一步阐明了如何将慕课教学手段如何在课堂中进行应用的方法,对慕课教学进行了有益的探索。  关键词:慕课;教学模式;教学改革  中图分类号:G642.0
摘要:随着“互联网 ”被明确作为国家产业升级转型战略的关键方向,计算机网络技术因此在计算机相关技术体系中的地位得到进一步加强,作为主要传授计算机网络技术的计算机网络类课程,其教学的效果也因此被赋予了更高的要求。计算机网络类课程的教学内容,主要围绕计算机网络体系的层次結构展开,进而系统地、分层次地讲述计算机网络的基本概念和工作原理。计算机网络类课程的基础知识内容具有概念抽象、体系逻辑强、无其他相关课
摘要:在互联网 教育环境下,大学计算机基础课程必须抛弃传统观念,构建创新理念,充分运用计算机通信技术与网络技术,引入慕课学习模式,结合SPOC与翻转课堂等模式,建立新的教学环境,满足不同层次的学生要求,从教学内容,教学方式,教学行为,教学理念等多个方面进行改革与创新,更好地推动大学计算机基础课程的教学与实践的推广。  关键词:互联网;慕课;SPOC;翻转课堂  中图分类号:TP393 文献标识码: