0
我使用的窗函數來計算的序列號:昂貴的甲骨文窗函數
SELECT R.ENCOUNTER_ID,
M.MEASURE_ID,
M.TAKEN_TIME,
M.VALUE,
row_number() OVER(PARTITION BY R.ENCOUNTER_ID, M.MEASURE_ID ORDER BY R.ENCOUNTER_ID, M.MEASURE_ID, TAKEN_TIME ASC) AS SEQ
FROM RECORD R
INNER JOIN MEASURE M ON R.ABC_ID=M.ABC_ID
記錄表對ABC_ID唯一索引和ENCOUNTER_ID非唯一索引。
的MEASURE表對ABC_ID和LINE的唯一索引(在查詢不使用)。
的解釋查詢計劃沒有ROW_NUMBER()給出了以下幾點:在與ROW_NUMBER()查詢
HASH JOIN 119702
TABLE ACCESS RECORD FULL 278
TABLE ACCESS MEASURE FULL 50696
解釋計劃給出了以下幾點:
WINDOW 377871
HASH JOIN 119702
TABLE ACCESS RECORD FULL 278
TABLE ACCESS MEASURE FULL 50696
似乎交叉表索引將有助於(在R.ENCOUNTER_ID和M.MEASURE_ID上),但我不確定它是否受支持。
我不知道該表統計信息更新頻率。
有沒有辦法在我的窗口函數上獲得更好的性能?每張桌子能否從額外的指數中受益?
這可能已經優化了幕後,或可能不會幫助,但我不認爲你需要'R.ENCOUNTER_ID'和'M.MEASURE_ID'在'ORDER BY',因爲他們在已經很'PARTITION BY'。在每個分區中,每列中的值將全部相同。 –