我在NUMERIC
列中存儲加密貨幣交易餘額。由於加密貨幣值與傳統貨幣相比在某些極端範圍內有所不同,因此我使用NUMERIC(60,20)
類型來捕獲所有用例。由於這感覺有點偏激,我很好奇PostgreSQL中具有高精度和精度的NUMERIC類型的性能
有哪些表現(CPU)數字列的精度和規模越來越大的處罰
什麼是數字列的精度和規模越來越大的存儲成本處罰
我在NUMERIC
列中存儲加密貨幣交易餘額。由於加密貨幣值與傳統貨幣相比在某些極端範圍內有所不同,因此我使用NUMERIC(60,20)
類型來捕獲所有用例。由於這感覺有點偏激,我很好奇PostgreSQL中具有高精度和精度的NUMERIC類型的性能
有哪些表現(CPU)數字列的精度和規模越來越大的處罰
什麼是數字列的精度和規模越來越大的存儲成本處罰
一個NUMERIC
列的申報規模和精確度作爲對您的插入值的約束,但他們不會直接影響存儲需求; 1::NUMERIC(1,0)
,1::NUMERIC(99,99)
和1::NUMERIC
都具有相同的基本表示。考慮到這一點,您的最佳選擇可能是使用無約束的NUMERIC
列,並將您的值轉換爲適用的比例/精度(按貨幣)。
NUMERIC
值存儲爲基數爲10,000的數字的可變長度數組,每個數據由16位整數表示,因此存儲成本爲每4個十進制數字2個字節,併爲每個值加上6個字節的標題。小數部分和整數部分是分開存儲的,因此11
消耗8個字節,而1.1
需要10個字符。您可以使用例如一個給定值檢查存儲要求。 SELECT pg_column_size(1.1::NUMERIC)
。
至於CPU開銷,我預計大部分操作的成本會隨着數字的數量呈線性變化。然而,由於首先獲取價值的I/O成本,這通常是相形見絀的,所以這可能不是問題;你必須在你自己的硬件上嘗試你的查詢以確認。
一個真正美麗的答案!謝謝。 –