我正在使用窗口函数来计算序列号:
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
RECORD 表在 ABC_ID 上有一个唯一索引,在 ENCOUNTER_ID 上有一个非唯一索引。
MEASURE 表在 ABC_ID 和 LINE 上具有唯一索引(未在查询中使用)。
没有 row_number() 的查询的解释计划给出以下内容:
HASH JOIN 119702
TABLE ACCESS RECORD FULL 278
TABLE ACCESS MEASURE FULL 50696
带有 row_number() 的查询的解释计划给出以下内容:
WINDOW 377871
HASH JOIN 119702
TABLE ACCESS RECORD FULL 278
TABLE ACCESS MEASURE FULL 50696
似乎跨表索引会有所帮助(在 R.ENCOUNTER_ID 和 M.MEASURE_ID 上),但我不确定它是否受支持。
我不知道表格统计信息的更新频率。
有没有办法在我的窗口函数上获得更好的性能?每个表都可以从额外的索引中受益吗?