暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

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

Oracle优化大师 2020-12-07
751


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得到所有的值,在二次查询。


文章转载自Oracle优化大师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论