Oracle语句优化 (汇总)

     大部分写sql语句都是为了实现而实现,如果最后在投入使用的过程中没有很难接受的性能,基本不怎么去考虑其性能。最近刚好有点时间,对优化方面进修进修,以备不时之需。

  • 选择最有效率的表名顺序

     Oracle的解析器按照从右到左的顺序处理from子句中的表名,写在最后的表将会最先处理,所以在多个表的情况下,需要选择数据条数最少的作为基础表写最后。

  • where子句中的连接顺序

Oracle采用自下而上的顺序解析where子句,所以表之间的连接必须写在其它where条件之前,可以过滤掉最大数量记录的条件必须写在where子句的末尾。

  • select语句避免使用*

Oracle解析过程中会将*依次转换成所有列名,这个工作是通过查询数据字典完成的,意味着将耗费更多时间。

  • 用Truncate代替delete

当删除表中记录时,通常情况下,回滚段用来存放可以被恢复的信息,若未commit事务,Oracle会将数据恢复到删除之前的状态。而Truncate删除后数据将不能恢复,因此很少的资源被调用,执行时间也会很短。

  • 尽量多使用commit

可以释放资源,如:回滚段上用于恢复数据的信息,被程序语句获的锁,redo log buffer中的空间,Oracle为管理上面资源中的内部话费。

  • 用where替换having语句

having只会在检索出所有记录后才对结果进行过滤,这个处理需要排序,总计等操作。on、where、having都可以加条件的子句中,on是最先执行的,where次之,having最后。

  • 通过内部函数提高效率

复杂的sql往往牺牲了执行效率,能够运用函数解决问题也是非常重要的。

  • 使用表的别名

sql连接多个表时,使用表的别名并把别名前缀到每列上,这样一来可以减少解析的时间,也能减少由列名歧义引起的语法错误。

  • 用exists替代in,用 not exists 替代not in

无论哪种情况下,not in都是最低效的,因为它是对子查询中的表执行了一个全表遍历,我们可以用外连接(outer joins)或not exists。

 

  • 用exists替代distinct

e0462d02ab414fe08f371b56eadac534.jpg

  •  sql语句用大写的

因为Oracle总是先解析Sql语句,把小写字母转换成大写字母再执行。

  • 避免在索引列上使用Not

Not会产生在和在索引列上使用函数相同的影响,当Oracle遇到Not会停止使用索引转而执行全表扫描。

  • 避免在索引列上使用计算

where语句中,如果索引列是函数的一部分,优化器将不使用索引而使用全表扫描。

低效:select name from dept where sal*12>5000;

高效:select name from dept where sal>5000/12;

  • 用>=替代>

低效:select name from dept where sal>=4;

高效:select name from dept where sal>3;

  • 优化group by

可以将不需要的记录在group by之前过滤掉。

低效:select job,avg(sal) from emo group job having job='j' or job='q';

高效:select job,avg(sal) from emo where  job='j' or job='q'  group job;

  • 用where替代order by

order by 中所有的列必须包含在相同的索引中,并保持在索引中的排列顺序;order by 中所有列必须定义为非空。如:表dept(code pk 不为空,id 不为空,name 可为空)

低效(索引不被使用)

select code from dept order by name;

高效(使用索引)

select code from dept where id>0;

  • 避免改变索引的类型

为避免Oracle对sql进行隐式的类型转换,最好把类型转换用显式表现出来。当字符和数值比较时,Oracle会优先转换成数值类型然后到字符类型。

  • 避免索引不起作用

在以下情况索引不起作用:

  1. '!='将不使用索引。记住索引只能告诉你什么存在表中,而不能告诉你什么不存在表中。
  2. '||'是字符连接函数。就像其它函数那样,停用了索引。
  3. '+'是数学函数,就像其它函数那样,停用了索引。
  4. 相同的索引不能相互比较,这将会启用全表扫描。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/18973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧姆龙以太网口怎么和电脑连接

捷米特JM-ETH-CP以太网通讯处理器用于欧姆龙 CP1L/ CP1E/ CP1H 系列 PLC 的以太网数据采集,捷米特JM-ETH-CP以太网模块不占用 PLC 通讯口,即编程软件/上位机软件通过以太网对 PLC 数据监控的同时,触摸屏可以通过复用接口与 PLC 进行通讯。支持…

MyBatis查询数据库(1)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了&#xff0…

光伏5G多合一融合终端|光伏多合一融合终端|光伏多合一群调群控网关|分布式光伏群控群调|光伏AGC/AVC系统这几者之间什么技术关系,多少钱一套预算?

光伏5G多合一融合终端|光伏多合一融合终端|光伏多合一群调群控网关|分布式光伏群控群调|光伏AGC/AVC系统这几者之间什么技术关系,多少钱一套预算? 一:光伏5G多合一融合终端的功能 光伏5G多合一融合终端的功能:群调群控/AGC/AVC功…

【数据结构与算法】栈算法题

TS 实现栈 interface IStack<T> {push(e: T): void;pop(): T | undefined;peek(): T;isEmpyt(): boolean;size(): number; }// implements: 实现接口, 一个类可以实现多个接口 class ArrayStack<T> implements IStack<T> {private data: T[] []; // private…

Spring详解(学习总结)

目录 一、Spring概述 &#xff08;一&#xff09;、Spring是什么&#xff1f; &#xff08;二&#xff09;、Spring框架发展历程 &#xff08;三&#xff09;、Spring框架的优势 &#xff08;四&#xff09;、Spring的体系结构 二、程序耦合与解耦合 &#xff08;一&…

在Windows server 2012上使用virtualBox运行CentOS7虚拟机,被强制暂停

文章目录 问题场景排查过程处理解决事后反思 问题场景 我们的平台服务使用docker部署&#xff0c;使用docker-compose进行管理&#xff0c;部署到CentOS7的服务器里平台部署到客户环境时&#xff0c;一小部分客户&#xff0c;使用自己机房或单独的服务器。很多客户不愿意采购新…

【嵌入式Linux项目】基于Linux的全志H616开发板智能垃圾桶项目

目录 一、功能需求 二、涵盖的知识点 1、wiringPi库下的相关硬件操作函数调用 2、线程&#xff08;未使用互斥锁和条件&#xff09; 3、父子进程 4、网络编程&#xff08;socket套接字&#xff09; 5、进程间通信&#xff08;共享内存和信号量&#xff09; 三、开发环境…

Elasticsearch原理剖析

一、 Elasticsearch结构 Elasticsearch集群方案由EsMaster、EsClient和EsNode1、EsNode2、EsNode3、EsNode4、EsNode5、EsNode6、EsNode7、EsNode8、EsNode9进程组成&#xff0c;如下图所示&#xff0c;模块说明如表下所示。 说明如表&#xff1a; 名称说明ClientClient使用H…

OpenCV 入门教程:颜色空间转换

OpenCV 入门教程&#xff1a;颜色空间转换 导语一、颜色空间的基本概念1.1 RGB颜色空间1.2 灰度颜色空间1.3 其他颜色空间 二、颜色空间转换三、示例应用3.1 提取图像的色彩通道3.2 调整图像的亮度和对比度 总结 导语 在图像处理和计算机视觉领域&#xff0c;颜色空间转换是一…

OpenCV(图像处理)-图片搜索

图片搜索 1.知识介绍2.实现流程2.1 计算特征点与描述子2.2 描述子的匹配2.3 求出单应性矩阵并画出轮廓2.4 将特征点标出 此篇博客作者仍在探索阶段&#xff0c;还有一些模糊的概念没有弄懂&#xff0c;请读者自行分辨。 1.知识介绍 Opencv进行图片搜索需要的知识有&#xff1…

nginx漏洞修复之检测到目标URL存在http host头攻击漏洞

漏洞说明 为了方便的获得网站域名&#xff0c;开发人员一般依赖于HTTP Host header。例如&#xff0c;在php里用_SERVER[“HTTP_HOST”]。但是这个header是不可信赖的&#xff0c;如果应用程序没有对host header值进行处理&#xff0c;就有可能造成恶意代码的传入。 解决方法…

前端学习——css盒子模型、css3新特性、伪类、布局0711TODO

样式还是得具体使用才能理解&#xff0c;不然会忘记也理解不透彻&#xff1b;还有定位&#xff0c;元素溢出&#xff0c;浮动&#xff0c;布局水平&垂直对齐&#xff1a; css3新特性 1过渡 2 动画 3 2D、3D转换 伪类 三种定位方式 弹性布局/栅格布局