我在一个过程中有这个查询,它加载数据的速度真的很慢。有没有更快的方法让这个查询运行?
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 次运行),并且在循环中被调用。每次执行的缓慢时间的积累使整个事情变慢。