Postgresql

降低 PostgreSQL 中的時間/時間戳精度是否有性能或儲存空間優勢?

  • September 3, 2021

PostgreSQL 允許time/timestamp指定精度:

time, timestamp, 並interval接受一個可選的精度值p,它指定秒欄位中保留的小數位數。預設情況下,對精度沒有明確的限制。的允許範圍p是 0 到 6。

來自PostgreSQL 13 文件

但是,它指出儲存空間對於 (timestamptime without timezone) 是恆定的 8 字節,對於不time with timezone考慮p.

在不需要額外精度的情況下——比如毫秒(p = 3)或秒(p=0)就足夠了——顯式降低精度是否有優勢?

如果您需要四捨五入的值,與每次訪問時動態舍入相比,將它們四捨五入儲存會更快且更不容易出錯。

並且精度越低意味著聯繫越多,索引重複壓縮的機會就越多(在足以提供該功能的新版本上)。如果您的 FS 提供內置壓縮,它還可以在數據文件離線時(如在備份中)和線上時為數據文件提供更好的壓縮。

與 PostgreSQL 的情況一樣,使用不同的類型更多地是為了記錄您的模式(無論是在能力方面還是在意圖方面),而不是性能優化。

這類似於CHARvsVARCHAR崩潰。在 PostgreSQL 中,兩者都在內部儲存在可變長度數組中,因此沒有性能差異,但您仍然可以使用不同的類型向 db 使用者發出信號,告訴他他可以從儲存的數據中得到什麼。

但是請記住,在時間戳精度的情況下,舍入行為可能非常出乎意料和不受歡迎。

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