case oracel 子查询_Oracle SQL 用于缩短执行查询所需要的时间

790088b74ce9ac5a5345c90167d5061b.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、付费专栏及课程。

余额充值