Postgresql

我應該將時間戳部分拆分為單獨的列嗎?

  • May 21, 2019

我正在建構一個 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表達式上創建索引。

擁有單獨的列會浪費空間並增加不必要的冗餘,而我可以想像沒有任何好處。

您似乎在進行過早的優化——您不應該假設任何特定設計的性能特徵,而是測試它們。

當您將時間戳值的組件儲存在單獨的列中時,您可能不會獲得明顯的性能優勢,但增加數據不一致或維護成本(或兩者兼而有之)的風險。

話雖如此,將時間戳的某些組件儲存為單獨的列**可能是有正當理由的,例如:

  • 年、季度、月等組件構成數據倉庫模型中的有效維度。
  • 您的數據庫物理設計要求按時間間隔對數據進行分區,以便於維護或提高某些操作的性能。

引用自:https://dba.stackexchange.com/questions/238669