在 Postgres 中有效地將時間戳截斷到 5 分鐘邊界
截斷時間戳對於時間分析至關重要。 Postgres 提供了 date_trunc 函數,使我們能夠將時間戳記舍入到各種單位。然而,為了截斷到最近的 5 分鐘邊界,需要更具體的方法。
通常採用以下簡單方法:
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
但是,當效能至關重要時,探索盡可能最快的解決方案至關重要。
替代方法:穿越紀元時間
另一種方法是將時間戳轉換為紀元時間戳,然後截斷它。此方法表示為:
SELECT to_timestamp( floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min')) * EXTRACT(epoch FROM interval '5 min') ) FROM huge_table AS ht LIMIT 4000000
基準測試和結果
為了評估這兩種方法的效能,針對一個包含400 萬個資料的大表進行了非正式基準測試行。交替查詢以防止快取優勢。
結果:
Method | Run 1 | Run 3 | Run 5 |
---|---|---|---|
Epoch Time | 39.368 seconds | 39.526 seconds | 39.883 seconds |
Hour and Minute | 34.189 seconds | 37.028 seconds | 32.397 seconds |
結論
令人驚訝的是,該方法使用date_trunc 和date_part 始終優優於紀元時間方法。儘管紀元時間方法更通用且更易於參數化,但它會犧牲一些效能來實現更廣泛的時間單位截斷。
因此,為了將時間戳截斷到 5 分鐘邊界(特別是在 Postgres 中),使用 date_trunc 的簡單方法而 date_part 是推薦的方法。
以上是在 PostgreSQL 中將時間戳截斷為 5 分鐘間隔的最快方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!