如何在 PostgreSQL中執行操作時間查詢
原始查詢複雜度
原始查詢旨在識別「開啟」的記錄(在指定的操作時間內),由於以下原因而複雜需要處理工作時間可能會持續到週末的各種情況。為了簡化這個過程,我們將採用不同的方法,使用名為 tsrange 的資料結構。
引入 tsrange
tsrange 是一種資料類型表示一系列沒有時區的時間戳的 PostgreSQL。它提供了一種方便的方式來儲存和操作時間間隔。
重新設計表格結構
我們將取代現有的欄位(opens_on、closes_on、opens_at、closes_at ),其中有一個名為「小時」、類型為tsrange 的欄位。營業時間將儲存為一組 tsrange 值。
範例
例如,以下 tsrange 值表示從週三下午 6 點到週四的營業時間,凌晨 5點:
'[1996-01-03 18:30, 1996-01-04 05:00]'
查詢使用tsrange
更新了表格結構,查詢變得更加簡單:
SELECT * FROM hoo WHERE hours @> f_hoo_time(now())
函數f_hoo_time()將帶時區的時間戳記轉換為時間戳,而包含運算子(@>) 檢查目前時間是否在指定時間範圍內。
索引和效能
要使用 tsrange 最佳化查詢,我們建議在小時列上建立 SP-GiST 索引。此索引可以有效地找到時間範圍,從而提高查詢效能。
結論
利用 tsrange 和 SP-GiST 索引,我們可以大幅簡化運行時間查詢並提高其效能。這種方法比原始查詢更有效率、更穩健。
以上是PostgreSQL 的「tsrange」如何簡化和最佳化操作時間查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!