oracle查询需要执行多久,Oracle SQL 用于缩短执行查询所需要的时间

c57bb0c6c9d65dbc7b2d219c67961402.png

SQL 主要功能之一就是不需要确切地告诉数据库如何获得数据,只需要执行一个查询,

指定想要的信息,而数据库会找到最好的方法获得它。

有时候通过优化技巧,获得更快的查询速度,以提高执行性能。

1  使用where 过滤不需要的行数据

没有where子句,它会检索table的所有行。是很浪费时间的。

where 子句中避免使用函数,否则会增加执行时间。

2  使用表连接 而不是多个查询

3  执行连接时使用完全限定的列引用

如:bad :

select p.name ,pt.name,description,price

from products  p, product_types  pt

where 1=1

and  p.product_type_id  =pt.product_type_id

and  p.product_id =1;

good:

select p.name ,pt.name,p.description,p.price

from products  p, product_types  pt

where 1=1

and  p.product_type_id  =pt.product_type_id

and  p.product_id =1;

使用列限定,数据库不需要浪费时间去搜索所有表,从而减少了执行时间。

4 使用case表达式而不是多个查询

当需要对一个table的相同行执行许多运算时,要使用case表达式,而不要用多个查询。

5  添加索引

6  使用where 而不是having

7  使用Union all 而不是 Union

Union 要删除两个查询的重复的行,需要时间。

8  使用exist 而不是 in

9  使用exist而不是distinct

10 使用Grouping sets 而不是 cube

11  使用绑定变量

代码重用的思想。

12  能使用TABLE 就不使用view

13  多表查询时,书写table的顺序是:数据量大的table 放在最前面

WHERE 子查询的顺序也一样。

SELECT A.* ,B.*

FROM A,B(数据量小)

WHERE A.ID=B.LINE_ID

14  经常要在where子句中出现的列,最好加索引(增加索引,会在insert数据时浪费时间去维护索引)

15  查询语句的where子句中避免有时间的列

16  要考虑代码重用,批量执行的好处

如:

速度差:

for i   in  1.. 100 loop

insert into  b;

select *

from  a ;

update  b

where id =*;

end loop;

优化后:

for i   in  1.. 100 loop

insert into  b;

select *

from  a ;

end loop;

update  b

where id =*;

17  多次用函数取值的sql

不如用sql得到所有的值,在二次查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值