暂无图片
pg的sql性能问题
我来答
分享
张明轩
2023-05-09
pg的sql性能问题
SELECT  DISTINCT sva.*,
      uma.sfid AS unified_account_ac_id,
      uma."name" AS unified_account_name,
      uma.accloud__entity_name__c AS unified_account_entity_name,
      uma.recordtypeid AS unified_account_record_type_id,
      uma.accloud__status__c AS unified_account_status ,
      uma.accloud__investment_source__c AS unified_account_investment_source
FROM v_share_visible_account_new sva INNER
JOIN accloud__fta_financial_account_uma__c uma
on sva.contact_ac_id=uma.accloud__record_owner__c
    AND sva.account_ac_id
IN 
  ( SELECT  DISTINCT accloud__primary_owner__c
  FROM accloud__fta_financial_account_uma__c 
  WHERE accloud__record_owner__c=uma.accloud__record_owner__c )
复制

现在查询跑不出来 请问可以如何改写sql?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
ssllmm

--使用 EXISTS 替代 IN 子查询

SELECT DISTINCT sva.*,
uma.sfid AS unified_account_ac_id,
uma."name" AS unified_account_name,
uma.accloud__entity_name__c AS unified_account_entity_name,
uma.recordtypeid AS unified_account_record_type_id,
uma.accloud__status__c AS unified_account_status,
uma.accloud__investment_source__c AS unified_account_investment_source
FROM v_share_visible_account_new sva
INNER JOIN accloud__fta_financial_account_uma__c uma
ON sva.contact_ac_id = uma.accloud__record_owner__c
WHERE EXISTS (
SELECT 1
FROM accloud__fta_financial_account_uma__c
WHERE accloud__primary_owner__c = sva.account_ac_id
AND accloud__record_owner__c = uma.accloud__record_owner__c
);

暂无图片 评论
暂无图片 有用 1
打赏 0
张明轩
题主
2023-05-10
谢谢,确实变快了 但是另一部分带有两个inner join 我该如何修改exist呢? sva.account_ac_id in( select DISTINCT tsrr.shared_record_id from ac_cloud_team t INNER JOIN ac_cloud_team_user_relation tur on t.ac_id=tur.team_id and t.activate=TRUE INNER JOIN ac_cloud_team_shared_record_relation tsrr on t.ac_id=tsrr.team_id and shared_sobjecttype='accloud__fta_financial_account_uma__c' where tur.contact_id=sva.contact_ac_id and tsrr.shared_record_id = uma.sfid)
张明轩
题主
2023-05-10
exist ( select DISTINCT tsrr.shared_record_id from ac_cloud_team t INNER JOIN ac_cloud_team_user_relation tur on t.ac_id=tur.team_id and t.activate=TRUE INNER JOIN ac_cloud_team_shared_record_relation tsrr on t.ac_id=tsrr.team_id and shared_sobjecttype='accloud__fta_financial_account_uma__c' where tur.contact_id=sva.contact_ac_id and tsrr.shared_record_id = uma.sfid and tsrr.shared_record_id=sva.account_ac_id ) 这样正确吗?

sql
SELECT DISTINCT sva.*,
uma.sfid AS unified_account_ac_id,
uma."name" AS unified_account_name,
uma.accloud__entity_name__c AS unified_account_entity_name,
uma.recordtypeid AS unified_account_record_type_id,
uma.accloud__status__c AS unified_account_status ,
uma.accloud__investment_source__c AS unified_account_investment_source
FROM v_share_visible_account_new sva
INNER JOIN accloud__fta_financial_account_uma__c uma
ON sva.contact_ac_id=uma.accloud__record_owner__c
AND sva.account_ac_id=uma.accloud__primary_owner__c

暂无图片 评论
暂无图片 有用 0
打赏 0
ssllmm

SELECT sva.*
FROM accloud__fta_financial_account_uma__c sva
WHERE EXISTS (
SELECT 1
FROM ac_cloud_team_shared_record_relation tsrr
INNER JOIN ac_cloud_team_user_relation tur ON tsrr.team_id = tur.team_id
INNER JOIN ac_cloud_team t ON t.ac_id = tur.team_id AND t.activate = TRUE
WHERE tur.contact_id = sva.contact_ac_id
AND tsrr.shared_sobjecttype = 'accloud__fta_financial_account_uma__c'
AND sva.sfid = tsrr.shared_record_id
)

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交