(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. jq图片展示插件highslide.js简单dom

    今天用用了一款图片展示插件highslide.js,感觉用起来很是舒畅,几乎不用怎么写代码,只需要知道如何写参数就行了. 那么这么牛叉的插件我们该如何用哪,下面我就跟大家讲解一下. 一.引入   首先 ...

  2. shell编程-项目部署(二)

    上节我们讲了项目部署的准备工作,现在具体讲下代码部署 首先梳理下思路,大致是这样: 获取代码 打包代码 传输代码 关闭应用 解压文件 放置文件(备份老文件,放置新的文件) 开启应用 最后检查下 OK, ...

  3. ML笔记:Deep Learning

    非DL:要找好的特征 DL:无需找好的特征,但新问题:要设计好的网络架构

  4. [ Java学习基础 ] Java的封装性与访问控制

    Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...

  5. [CQOI2013]新Nim游戏

    Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴 ...

  6. Go学习——go+channel实战(转)

    转载:http://studygolang.com/articles/2423 背景 在最近开发的项目中,后端需要编写许多提供HTTP接口的API,另外技术选型相对宽松,因此选择Golang + Be ...

  7. ●BZOJ 4821 [Sdoi2017]相关分析

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解: 线段树是真的恶心,(也许是我的方法麻烦了一些吧)首先那个式子可以做如下化简: ...

  8. CSS之绝对定位

    w3school定义: 绝对定位的元素的位置相对于最近的已定位祖先元素(这里的已定位指的是绝对定位或者相对定位),如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块. 对于定位的主要问题是要 ...

  9. 11.QT-布局管理器(Box,Grid,Form,Stacked)

    布局管理器简介 QT中提供了对界面组件进行布局管理的类,用于对界面组件进行管理, 能够自动排列窗口中的界面组件 窗口大小变化后,便会自动更新界面组件的大小. 布局管理器可以自定义,从而达到更加个性化界 ...

  10. 聊聊jstack的工作原理

    实现一个jstack 在聊Jstack得工作原理前呢,不如让我们先写一个简单的jstack玩玩.不用怕,很简单的,就几行代码的事,看: public class MyJstack { public s ...