0

いくつかの助けを借りて、最近、2 つのローカル テーブルを使用してクエリを作成しました。テーブルの 1 つは「販売」用で、もう 1 つは「日次価格」用です。私たちの販売テーブルは現在、その日に商品が販売された価格を保存することができないため、製品 ID と両方のテーブルの日付フィールドを照合することにより、「日次価格」テーブルからその価格を取得します。日次価格テーブルは、文字どおり 3 つのフィールド (製品 ID、日付、価格) が毎日マスター テーブルに追加されたものです (1 日あたり約 50,000 行)。クエリでは、「日次価格」テーブルが平日にのみ生成され、週末に販売があるという事実を考慮する必要がありました。これを行うために、ロジックは、販売日の後の最初の入手可能日から価格を取り込みます。(たとえば、金曜日または土曜日に行われた販売は、月曜日に生成された価格を使用してレポートされます)

私が使用したコードは、小さなサンプル データ セットを使用すると機能するように見えますが、大きなサンプル データ セットでは時間がかかります。以下は私が使用しているコードです:

SELECT ProdID,
        Date,
        (SELECT Price
        FROM   PRICE_TABLE P
        WHERE  P.ProdID = S.ProdID
        AND    P.Date = (SELECT MIN(P2.Date)
                         FROM   PRICE_TABLE P2
                         WHERE  P2.ProdId = P.ProdID
                         AND    P2.Date >= S.Date))
FROM   SALES_HISTORY S;

私の質問は、これをスピードアップするにはどうすればよいですか? これらのフィールドにインデックスを付けると速度が向上しますか? これまでフィールドにインデックスを付けたことがないので、そうするには少し助けが必要です。

ありがとうございました!

4

0 に答える 0