VB で大きなリクエストを生成していますが、かなり大きくなる可能性があります...そして遅くなります。
3 種類のピース (1、2、3) があり、ピースのパッケージの平均湿度が必要なので、リクエストのヘッダーは次のようになります。
SELECT package.id,
CASE WHEN Sum(package.totalPce) = 0 THEN 0 ELSE
Sum(nbTooHumid * package.totalPce) / Sum(package.totalPce) END as tooHumid,
次に、nbTooHumid の代わりに nbTooDry で同じことを行い、3 番目として HumidOk を使用します。
さらに、Sum(package.totalPce) で除算して、他のフィールドも計算します。
だから、私は多かれ少なかれ10回呼び出します:
Sum(package.totalPce)
リクエストが非常に長く、実行時間が5秒から2分の間で変動するため、リクエストが遅くなっているのかどうか疑問に思っています。
編集:ゴードンの答えを読んだ後に追加する詳細。
サブリクエストからフィールド nbTooHumid を取得し、リクエストで取得したいすべてのパッケージを、UNION を使用して他のパッケージからマージする必要があります。
そして、pieces テーブルには何百万ものエントリがあるので、そうです、IO の問題です。
また、より完全な例を追加して、私の要求がどのように見えるかを完全に把握できるようにします。
SELECT package.id,
CASE WHEN Sum(package.totalPce) = 0 THEN 0 ELSE
Sum(nbTooHumid * package.totalPce) / Sum(package.totalPce) END as tooHumid,
manyOtherFields
FROM
((SELECT count(*) as totalPce, otherFields
FROM pieces
WHERE idPackage = X and date between '2012-01-01' and '2012-01-11')
UNION
(SELECT ...)
)
これは私の要求の平均的な形式に過ぎず、正確な構文やフィールド名を使用していないことに注意してください。