Postgresql
降低 PostgreSQL 中的時間/時間戳精度是否有性能或儲存空間優勢?
PostgreSQL 允許
time
/timestamp
指定精度:
time
,timestamp
, 並interval
接受一個可選的精度值p
,它指定秒欄位中保留的小數位數。預設情況下,對精度沒有明確的限制。的允許範圍p
是 0 到 6。但是,它指出儲存空間對於 (
timestamp
和time without timezone
) 是恆定的 8 字節,對於不time with timezone
考慮p
.在不需要額外精度的情況下——比如毫秒(
p = 3
)或秒(p=0
)就足夠了——顯式降低精度是否有優勢?
如果您需要四捨五入的值,與每次訪問時動態舍入相比,將它們四捨五入儲存會更快且更不容易出錯。
並且精度越低意味著聯繫越多,索引重複壓縮的機會就越多(在足以提供該功能的新版本上)。如果您的 FS 提供內置壓縮,它還可以在數據文件離線時(如在備份中)和線上時為數據文件提供更好的壓縮。
與 PostgreSQL 的情況一樣,使用不同的類型更多地是為了記錄您的模式(無論是在能力方面還是在意圖方面),而不是性能優化。
這類似於
CHAR
vsVARCHAR
崩潰。在 PostgreSQL 中,兩者都在內部儲存在可變長度數組中,因此沒有性能差異,但您仍然可以使用不同的類型向 db 使用者發出信號,告訴他他可以從儲存的數據中得到什麼。但是請記住,在時間戳精度的情況下,舍入行為可能非常出乎意料和不受歡迎。