Postgresql
我應該將時間戳部分拆分為單獨的列嗎?
我正在建構一個 PostgreSQL 數據庫並創建了一個
timestamp
表,其中主鍵是時間戳本身(例如id: Fri Apr 13 2018 15:00:19
)。該數據庫應該稍後遷移到數據倉庫,從中提取分析。在這一點上,我想知道向表中添加額外的列是否有益
timestamp
,包含解析的指標,例如下面的範例,或者有一個帶有 ID 的表。id | year | month | day | hour | minutes | seconds ------------------------------------------------------------------------- Fri Apr 13 2018 15:00:19 | 2018 | 4 | 13 | 15 | 0 | 19 vs id ------------------------- Fri Apr 13 2018 15:00:19
我的目標是在查詢數據倉庫時實現最佳性能,因此我假設相應地拆分時間戳將導致更快的查詢,而不是實時解壓縮時間指標:
SELECT * FROM timestamp_table WHERE year = 2018 /* Querying values already parsed */ vs SELECT * FROM timestamp_table WHERE YEAR(timestamp_id) = 2018 /* Parsing in real-time*/
我將不勝感激對此的一些最佳實踐。
保留時間戳,不要為元件添加列。
如果您需要搜尋時間戳的一部分,您始終可以在
extract
表達式上創建索引。擁有單獨的列會浪費空間並增加不必要的冗餘,而我可以想像沒有任何好處。
您似乎在進行過早的優化——您不應該假設任何特定設計的性能特徵,而是測試它們。
當您將時間戳值的組件儲存在單獨的列中時,您可能不會獲得明顯的性能優勢,但會增加數據不一致或維護成本(或兩者兼而有之)的風險。
話雖如此,將時間戳的某些組件儲存為單獨的列**可能是有正當理由的,例如:
- 年、季度、月等組件構成數據倉庫模型中的有效維度。
- 您的數據庫物理設計要求按時間間隔對數據進行分區,以便於維護或提高某些操作的性能。