通过删除不同的关键字来优化查询

时间:2019-04-05 09:35:10

标签: sql postgresql stored-functions

我正在尝试通过删除distinct关键字来调整一个查询以提高存储功能的性能。

在查询调整的过程中,由于性能下降,我在存储函数中遇到了查询,该查询使用了distinct关键字,因此性能正在下降,因此,我尝试使用不具有distinct关键字的功能编写查询。 / p>

当前代码具有不同的关键字:-

select distinct dm.strdatadest 
            from PUBLIC.temp te1
            JOIN PUBLIC.applicationconfiguration AC on AC.intapplicationid = te1.applicationid
            JOIN columnmapping cm on cm.intapplicationid = AC.intapplicationid
            JOIN datamapping dm on lower(dm.strcolumnsource) = lower(cm.strcolumnsource)
            JOIN srctable s on s.applicationid=AC.intapplicationid
            where lower(cm.strtablesource) = lower(s.tablename) and 
            lower(dm.strdatasource) = lower('||quote_literal(rec.status) ||') and lower( dm.strcolumndest ) LIKE ''strstatus'' and te1.applicationid='||quote_literal(rec.applicationid);

通过删除不同的关键字来尝试代码:-

select  dm.strdatadest
from PUBLIC.temp te, 
PUBLIC.applicationconfiguration AC,
            PUBLIC.columnmapping cm,
            PUBLIC.datamapping dm
            where AC.intapplicationid = te.applicationid and cm.intapplicationid = AC.intapplicationid and lower(dm.strcolumnsource) = lower(cm.strcolumnsource)
            and lower(cm.strtablesource) = lower(s.tablename) and 
            lower(dm.strdatasource) = lower('||quote_literal(rec.priority) ||') and lower( dm.strcolumndest ) LIKE ''strpriority'' and te1.applicationid='||quote_literal(rec.applicationid)
            GROUP BY dm.strdatadest;

我需要一些拒绝谁才能通过删除不同的关键字来优化查询

1 个答案:

答案 0 :(得分:0)

关于您的查询,有两点需要提及

  1. 隐式连接与显式连接的性能大致相同。
  人们经常问,隐式联接和显式联接之间是否存在性能差异。答案是:“通常不会”

  1. distinct vs group,其中 distinct 最适合内存使用, group by 最适合速度,因此后者优于前者,但需要时需要大量内存。
  

独特的方法执行如下:

     
      
  • 将所有business_key值复制到临时表

  •   
  • 对临时表进行排序

  •   
  • 扫描临时表,返回与其之前不同的每个项目

  •   
     

group by可以像这样执行:

     
      
  • 扫描整个表,将业务键的每个值存储在哈希表中

  •   
  • 返回哈希表的键

  •   

下面的链接有一个精妙的解释。

implicit join vs explicit join

distinct vs group by