2009-06-11 62 views
3

根據您對Oracle的使用經驗,索引的最佳類型和設置將在DATE類型的列上設置?什麼類型的索引最適合Oracle的DATE類型?

  • 我不一定需要去分區索引。
  • 它是一種記錄類型的表。
  • 你並不關心唯一ID作爲主鍵(實際上日期足夠接近,大多數時候都是唯一的,但由於它的性質,永遠不會)。

創建羣集索引是否公平?

我感興趣的是優化像SELECT * FROM Log WHERE [Date]> '20 -06-2009'ORDER BY [Date] DESC這樣的查詢的執行,不會大幅減慢插入。 (順便說一句,在現實世界中,我會用正確的語法TO_DATE避免截斷和缺失索引)

乾杯,

回答

5

定期B-tree索引將是適當的,但如果這是與日增加的值,然後尋找出索引塊的爭日誌表。如果你有很多會話在索引中插入新值並且這些值屬於同一個塊,那麼你可能會遇到性能問題。對此的一種緩解措施是反向密鑰索引,但這使得您提供的類型的查詢更加昂貴,因爲反向密鑰索引無法支持範圍掃描。您將獲得完整索引掃描或快速全索引掃描。

這也會使索引更大,因爲索引塊拆分將是50/50,而不是Oracle在檢測索引值中向右增長模式時使用的90/10。

6

普通索引應該做的很好。由於它是一個日誌,所以新的條目應該總是有一個遞增的日期值,從來沒有過去的日期,這使索引追加容易。插入不是一個大的放緩。

如果您遇到上述問題,請僅考慮更復雜的索引。

問候 ķ

1

根據數據量的不同,我會重新考慮分區 - Oracle在運行查詢時可以使用分區修剪 - 這也帶來了稍後可以輕鬆歸檔舊日誌數據的好處。