2016-11-18 1 views
1

NUMERICカラムに暗号化トランザクションの残高を格納しています。 cryptocurrencyの値は伝統的な通貨に比べて多少の極端な範囲で変化するため、私はNUMERIC(60,20)タイプを使用してすべてのユースケースを取得しています。これは少し極端に感じるように、私は好奇心(CPU)増加NUMERIC列の精度とスケールの罰則パフォーマンスは何PostgreSQLで精度とスケールが高いNUMERIC型のパフォーマンス

  • 増加NUMERIC列の精度とスケールのストレージコストの罰則は何

答えて

2

NUMERIC列の宣言規模と精度があなたの挿入された値の制約となり、彼らは直接ストレージ要件に影響を与えません。 1::NUMERIC(1,0),1::NUMERIC(99,99)および1::NUMERICはすべて、同一の基礎表現を有する。これを念頭において、最善の選択肢は、拘束されていないNUMERIC列を使用して、通貨ごとに適切なスケール/精度に値をキャストすることです。

NUMERIC値は、それぞれが16ビット整数で表される可変長配列の10,000桁として格納されるため、ストレージコストは4桁の小数点2桁と各値の6バイトのヘッダーになります。分数部分と整数部分は別々に格納されるため、11は8バイトを消費し、1.1には10が必要です。 SELECT pg_column_size(1.1::NUMERIC)

CPUのオーバーヘッドに関しては、ほとんどの操作のコストが数字の桁数に比例して変化することが予想されます。しかし、これは一般的に、最初に値をフェッチするI/Oコストが小さくなるため、問題にはならない可能性があります。確実に知るためには、自分のハードウェアでクエリを実行する必要があります。

+0

本当に美しい答えです!ありがとうございました。 –

関連する問題