目前我有一個子查詢,它本身就有一個子查詢。性能方面,當我把它放到我的存儲過程中時,這並不會很好。我想知道是否有任何方法可以提高此代碼的性能,或者查看編寫此代碼的不同方式?提高子查詢的性能
基本上我正在查找價格數據,但如果價格發生變化,我們只會將價格記錄加載到我們的倉庫中。所以我需要查看每個工具的最新日期,我們已收到價格,然後返回該價格。我有以下代碼:
DECLARE @EndDate DATETIME
SET @EndDate = '2015-10-31'
SELECT
ip2.INSTR_ID
, ip2.PRC_TMS
, ip2.PRC_CURR_CDE
, COALESCE(MAX(CASE
WHEN ip2.PRC_TYP = 'CLO' THEN ip2.PRC_QUOTE_AMT
END),
MAX(ip2.PRC_QUOTE_AMT)) AS PRC_QUOTE_AMT
FROM ISSUE_PRICE AS ip2
INNER JOIN (
SELECT
INSTR_ID AS INSTR_ID
, MAX(PRC_TMS) AS PRC_TMS
FROM ISSUE_PRICE
WHERE PRC_SRCE_TYP = 'SSC'
AND PRC_TMS <= @EndDate
AND PRC_TYP IN ('LST', 'CLO')
GROUP BY INSTR_ID) AS i2
ON i2.INSTR_ID = ip2.INSTR_ID
AND i2.PRC_TMS = ip2.PRC_TMS
WHERE ip2.PRC_SRCE_TYP = 'SSC'
AND ip2.PRC_TYP IN ('LST', 'CLO')
GROUP BY ip2.PRC_TMS, ip2.INSTR_ID, ip2.PRC_CURR_CDE
任何幫助將不勝感激。
感謝
我要做的第一件事是看我對你使用這些表的索引,確保統計信息是到那些表的日期,然後在內部部分之外尋找將聚合移動到儘可能高的水平。另外,請在更快的執行時間內使用'EXISTS'子句產量進行研究。大多數情況下,提供關於表中索引的一些信息以及查詢表中的數據量是非常有用的,作爲開始。 –
[每組檢索n行](http://dba.stackexchange.com/questions/86415/retrieving-n-rows-per-group) –