プロシージャにこのクエリがあり、データの読み込みが非常に遅いです。このクエリを実行するより高速な方法はありますか?
SELECT date, price
FROM ( SELECT date,
price,price_src,
ROW_NUMBER() OVER (PARTITION BY date ORDER BY
CASE WHEN price_src = 'mom' THEN
0
WHEN price_src = 'dad' THEN
1
WHEN price_src = 'other' THEN
2
END) AS roworder
FROM pr.sources e
WHERE e.home = inTick
AND price IS NOT NULL
AND e.security = inVal
AND e.securityNum = NVL(inSecurity,'FWD')
AND bc= 'USD'
AND date >= NVL(startDate, date)
AND date <= NVL(endDate, date)
)
WHERE roworder = 1
ORDER BY date;
inval
基本通貨が米ドルで、特定の日付範囲内の特定の値 ( ) の価格を取得したいと考えています。問題は、ここに優先順位付けが含まれていることです。最初に「お母さん」の価格設定ソースから入手してみてください。それが利用できない場合は、「お父さん」に進み、次に「その他」に進みます。
テーブルのサンプルを次に示します。
+------------+------+-----+-------------+--------- ----------+--------+ | | 日付 | ホーム | 紀元前 | セキュリティ番号 | セキュリティ | price_src | 価格 | +------------+------+-----+-------------+--------- ----------+--------+ | | 2001-05-04 | 3A | 米ドル | 前輪駆動 | 32 | お母さん | 548.54 | | | 2012-05-04 | 3G | 米ドル | BWD | 58 | お父さん | 58.54 | | | 2009-05-04 | 3F | 米ドル | 前輪駆動 | 39 | その他 | 588.54 | | | 2010-05-04 | 3E | 米ドル | 前輪駆動 | 38 | お母さん | 38.54 | +------------+------+-----+-------------+--------- ----------+--------+
テーブルには 200 万を超えるレコードがあります。特定の日付の特定の値 (通貨またはプロパティである可能性があります) の価格を取得することになっています。
クエリの実行には 10 秒かかり (1 回の実行で)、ループで呼び出されます。実行ごとに遅いタイミングが蓄積されると、全体が遅くなります。