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

问题描述 投票:0回答:1

我试图通过删除distinct关键字来调整一个查询以提高存储函数的性能。

在查询调优的过程中,我遇到了存储函数中查询,其中distinct关键字正在使用,因为性能下降,所以我尝试使用相同的功能编写查询而不使用distinct关键字。

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

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;

我需要一些sujjestion谁通过删除不同的关键字来调整查询

sql postgresql stored-functions
1个回答
0
投票

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

  1. 隐式连接与显式连接,其大致具有相同的性能。

人们经常会问隐式和显式连接之间是否存在性能差异。答案是:“通常不是”

  1. 不同的vs组,其中distinct对于内存使用是最佳的,group by对于速度是最佳的,因此后者优于前者但是如果需要则需要大量的内存。

不同的方法执行如下:

  • 将所有business_key值复制到临时表
  • 对临时表进行排序
  • 扫描临时表,返回与之前不同的项目

group by可以执行如下:

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

以下链接的精明解释。

implicit join vs explicit join

distinct vs group by

© www.soinside.com 2019 - 2024. All rights reserved.