oracle SQL简介(五)

8.   sql优化总结

写高效的sql 语句:

ORACLE SQL注意事项

1.       共享SQL语句

当向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。共享的语句必须满足三个条件:

A.字符级的比较:

   当前被执行的语句和共享池中的语句必须完全相同.

B. 两个语句所指的对象必须完全相同

C. 两个SQL语句中必须使用相同的名字的绑定变量(bind variables)

2.       选择最有效率的表名顺序

注:只在基于规则的优化器中有效

3.       WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

4.       SELECT子句中避免使用'*'

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

5.       计算记录条数

     count(*) count(1)稍快,区别不是很大,高版本基本没有区别。

6.       WHERE子句替换HAVING子句

    避免使用HAVING子句, HAVING只会在检索出所有记录之后才对结果集进行过滤.

7.       减少对表的查询

如写下列查询条件:

SELECT * FROM TABLES WHERE  (TAB_NAME,DB_VER) = ( SELECT TAB_NAME,DB_VER) FROM TAB_COLUMNS

8.       EXISTS替代IN

    在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(NOT EXISTS)通常将提高查询的效率.

9.       用表连接替换EXISTS

    通常来说, 采用表连接的方式比EXISTS更有效率

10.   用索引提高效

以后详解

11.   >=替代>

两者的区别在于, 前者DBMS将直接跳到第一个满足条件的记录,而后者将首先定位到条件中的记录并且向前扫描第一个满足条件的记录.

12.   UNION ALL 替换UNION ( 如果有可能的话)

    SQL语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后在输出最终结果前进行排序.

如果用UNION ALL替代UNION, 这样排序就不是必要了. 效率就会因此得到提高.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值