我在Oracle數據庫中有一個名爲my_table的表,例如。它是日誌表的類型。它有一個增量列,其名稱爲「id」和「registration_number」,它是註冊用戶的唯一。現在,我想註冊用戶最新的變化,所以我寫了下面的查詢來完成這個任務:選擇最優化查詢
第一個版本:
SELECT t.*
FROM my_table t
WHERE t.id =
(SELECT MAX(id) FROM my_table t_m WHERE t_m.registration_number = t.registration_number
);
第二個版本:
SELECT t.*
FROM my_table t
INNER JOIN
(SELECT MAX(id) m_id FROM my_table GROUP BY registration_number
) t_m
ON t.id = t_m.m_id;
我的第一個問題是上面哪個查詢是推薦的,爲什麼?第二個是如果有時候大約有70.000個插入到這個表中,但是大多數插入行的數量在0到2000之間變化,那麼向這個表中添加索引是否合理?
感謝您的回答。實際上,起初我使用ROW_NUMBER()做了這個,但後來我認爲這不是最好的方式,所以我嘗試了其他方法來做到這一點。爲什麼認爲它可能會更快? – 2013-04-24 06:05:36
我已經測試過,但速度較慢。感謝您的時間和索引建議 – 2013-04-24 06:25:28
我可以想象一下'max'查詢會更快 - 如果oracle在索引上使用'min/max scan'。但是你在那裏得到了一個組,並且我不確定oracle可以對組合索引執行最小/最大掃描。值得檢查。 – haki 2013-04-24 08:57:41