(1)选择运算

尽可能先做选择运算,这是优化策略中最重要、最基本的一条,选择运算一般会使计算的中间结果大大变小,在对同一表格进行多个选择运算时,选择条件的排列顺序对性能也有很大影响,因为排列顺序不仅影响索引的选取,而且关系到临时表的大小。选择条件的选取极大地影响着查询语句的计算量,因此要提高查询的响应速度,应该将较严格的条件写在前面,较弱的条件放在后面。

(2)投影运算

如果投影运算和选择运算同时进行,并且有若干个投影运算和选择运算都对同一个关系操作,那么可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。

(3)联结运算

联结运算是数据库中常用的运算方法。由于联结运算会产生很多的临时表,尤其是多个表格的联结运算,未经过优化的SOL查询语句会产生巨大的计算量。所以对于连接选择运算,如果可以由嵌套SQL语句实现,就应采用嵌套SQL语句形式,以减少数据量。对于不能改写的连接选择运算,可以采用调整表的排列顺序或者选择条件的方式来减少临时表中的列数,同样有优化系统性能的作用。但是表的连接运算会造成参与运算关系的额外开销,因此应尽量避免连接;必须使用连接时,可以在列上建立索引以提高执行速度,一般可选择有索引的表作为内部表,而较小的表作为外部表,这样设计可以减少重新存取内部表的次数。连接使用子查询可以在关系运算前减少参与关系运算的表的体积。

(4)数据类型转换

尽可能避免数据类型的转换,在做比较时,有相同数据类型的语句其执行效率更高,否则在数据类型的转换过程中会因为精度限制而造成不精确的值,运行时转换也需要花费很大代价。

(5)结果集减小

结果集的方法为除非查询全部列,否则可以用具体的列名来代替‘木”,避免返回多余的列。SOL语句中的WHERE子句会首先被执行,因此不要用HAVING来代替功能相同的WHERE子句,WHERE子句可以及早滤掉不满足条件的记录,减少GROUP BY处理的行数。

(6)笛卡几积

把需要的选择同在它之前要执行的笛卡儿积结合起来,以成为同一个连接运算,这样的连接特别是等连接运算,要比同样关系上的笛卡儿积节省很多的时间。

(7)SELECT,UPDATE,DELETE语句中的子查询应当有规律地查找少于20%的表行。如果一个SOL语句查找的记录行数超过其总行数的20%,那么即使使用了索引,性能上的提高也非常有限。

(8)索引的建立

不宜在需要频繁删除的表中建立索引,否则很容易产生空间碎片,因为当记录从表中删除时,相应也会从表的索引中删除。表释放的空间可以再用,而索引释放的空间却不能再用;频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片。在允许的条件下,也可以阶段性地TRUNCATE表,TRUNCATE命令删除表中所有记录,也删除索引碎片。

(9)索引的使用

在使用索引时要按索引对应字段的顺序进行引用。

(10)“+”的使用用(+)比用NOT IN更有执行效率。

EBS开发性能优化之SQL语句优化的更多相关文章

  1. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  2. 数据库的优化(表优化和sql语句优化)

    在这里主要是分为表设计优化和sql语句优化两方面来实现. 首先的是表设计优化: 1.数据行的长度不要超过8020字节.如果是超过这个长度的话这条数据会占用两行,减低查询的效率. 2.能用数字类型就不要 ...

  3. ORACLE性能优化之SQL语句优化

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   操作环境:AIX +11g+PLSQL 包含以下内容: 1.  SQL语句执行过程 2.  优化器及执行计划 3.  合 ...

  4. 数据库性能调优——sql语句优化(转载及整理) —— 篇1

    一.问题的提出                    在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 ...

  5. 数据库性能优化之SQL语句优化

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等是体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  6. 数据库性能优化之SQL语句优化(上)

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的 ...

  7. [转]数据库性能优化之SQL语句优化1

    一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...

  8. 数据库性能优化之SQL语句优化1

    一.问题的提出 在 应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 际应用后,随着数据库中数据的增加, ...

  9. 数据库性能调优——sql语句优化(转载及整理) —— 篇2

    下面是在网上搜集的一些个人认为比较正确的调优方案,如有错误望指出,定虚心改正 (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中 ...

随机推荐

  1. 第一届“百度杯”信息安全攻防总决赛_Upload

    题目见i春秋ctf训练营 看到fast,就想抓个包看看,以前有道题是打开链接直接来了个跳转,当然这题不是 查看返回包,发现一个好东西 拿去base64解码看看 感觉给出的字符串能继续解码,果然解码后得 ...

  2. CentOS6.9安装

    我安装在VM的虚拟机中.具体安装方式网上很多,由于本机只能安装32位的linux系统,所以悬在了Centsos6.9版本.点此下载. 其中有一种是叫做LIVEDVD的版本,这种的值虚拟机中配置后,打开 ...

  3. hdu 5830 FFT + cdq分治

    Shell Necklace Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  4. [APIO2008]

    A.免费道路roads 题意:给定n个点m条边的图,边有黑白颜色,求是否有一个生成树满足恰好有K条黑边,并输出方案. 题解:先加白边,求出必须加的黑边,然后加黑边到K条,剩下的用白边填充. 顺便说说, ...

  5. SpringBoot添加自定义拦截器

    拦截器的主要作用是拦截用户的请求并做相应的处理,如判断用户是否登录,用户是否具有操作权限等等. 实现 HandlerInterceptor 接口来拦截请求 public class MyInterce ...

  6. springboot由于mysql表类型导致的 setRollbackOnly() 事务不回滚

    在SpringBoot 中,使用事务非常简单,只需在方法上面加入 @Transactional  注解就可以实现.也可加在类上,此时则类中所有方法都支持事务. 而当我使用下面代码时,发现事务却没有回滚 ...

  7. Selenium之unittest测试框架详谈及实操

    申明:本文是基于python3.x及selenium3.x. unittest,也可以称为PyUnit,可以用来创建全面的测试套件,可以用于单元自动化测试(模块).功能自动化测试(UI)等等. 官方文 ...

  8. Linux下的crontab定时、执行任务命令详解 oracle 自动备份

    在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为&qu ...

  9. React Suite v3.0 正式版发布

    React Suite v3.0 正式版发布 相信很多人会好奇,React Suite 是什么? React Suite 是 HYPERS 前端团队和 UX 团队开源的一套基于 React 的 UI ...

  10. selenium常用内容

    一.声明浏览器对象 注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入 from selenium import webdriver #webdriver可以认为是浏览器的 ...