簡體   English   中英

Firebird SQL:由於合並而查詢緩慢或者可以重寫

[英]Firebird SQL: query slow due to coalesce or can it be rewritten

我遇到一些常用查詢的性能問題。

SELECT
v.id,
coalesce((SELECT sum(amount) FROM artjournal WHERE variant_ref=v.id AND storage_ref=1 AND atype_ref in (1,3,4)), 0) "fv", 
coalesce((SELECT sum(amount) FROM artjournal WHERE variant_ref=v.id AND storage_ref=1 AND atype_ref=2), 0) "ivo", 
coalesce((SELECT sum(amount) FROM artjournal WHERE variant_ref=v.id AND storage_ref=1 AND atype_ref=5), 0) "iio", 
coalesce((SELECT sum(amount * mvalue) FROM artjournal WHERE variant_ref=v.id AND storage_ref=1), 0) "vw"
FROM productvariant v

因為artjournal是一張大桌子,每天都有成千上萬的新唱片,演出變得越來越糟糕。

我有所有ID字段的索引。

有沒有辦法重寫這個語句來加快速度? 或者我可以使用不同的方式從artjournal表中檢索數據,如果結果為null,則返回0?

謝謝你的想法,

克里斯蒂安

看起來你想要一個過濾的聚合:

SELECT v.id,
       sum(case when a.atype_ref in (1,3,4) then a.amount else 0 end) as "fv",
       sum(case when a.atype_ref = 2 then a.amount else 0 end) as "ivo",
       sum(case when a.atype_ref = 5 then a.amount else 0 end) as "iio",
       sum(a.amount * a.mvalue) as "vw"
FROM productvariant v
  LEFT JOIN artjournal a ON a.variant_ref = v.id
WHERE storage_ref = 1
GROUP BY v.id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM