oracle经常能用放到的语句小优化

先看下oracle的执行过程

在平时写sql的时候,会用得上的一些优化:

is null或者is not null

所有的sql语句一旦在where语句后面加上了is null或者is not null,那么oracl优化器就会不再使用索引。

使用%的语句

列举两个例子说明该问题:

查询user表中name带a的

例子1:Select *from user where name like ‘%a%’;

例子2:Select *from user where name like ‘a%’;

由于例1中通配符(%)在搜寻词首出现,所以oracle系统不使用name的索引,通配符会降低查询的效率,但当通配符不再词首出现,又能使用索引,如例2所示。

3.选择最有效的表名顺序

例如:TAB1 1000条记录, TAB2 只有1条记录

选择记录最少的作为基表

Select count(1) from tab1,tab2;

4.where在字句中的链接顺序

oracle的解析按照从上而下解析,因此表之间的连接必须写在where条件之前:

例:

低效率:

select counts(1) from

table t1

where size> 50000 and name= 'manager'

and 25

高效率:

select counts(1) from

table t1

where 25

and size> 50000 and name= 'manager';

5.truncate和delete

当删除一个表时,使用delete执行删除操作,回滚端需要用来存放可恢复的信息,在没有提交事务的时候,执行回滚事务,数据会恢复到执行delete操作之前,而当用truncate是,回滚端则不会存放可恢复的信息,减少资源的调用。

6.where和having

避免使用 HAVING 子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过 WHERE 子句限制记录的数目,那就能减少这方面的开销.

7.in和or

低效:

Select counts(1) from table where loc_id = 10 or loc_id = 20 or loc_id = 30

高效:

Select counts(1) from table where loc_in in (10,20,30);

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190822A0JHWM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励