現在、10 ~ 20 桁の値をデータベースに格納する必要があるアプリケーションを開発しています。
私の質問は、どのデータ型を使用する必要があるのですか? この数字は主キーとして使用されるため、DB のパフォーマンスは私のアプリケーションにとって重要です。Java では、この数字を BigDecimal として使用します。
現在、10 ~ 20 桁の値をデータベースに格納する必要があるアプリケーションを開発しています。
私の質問は、どのデータ型を使用する必要があるのですか? この数字は主キーとして使用されるため、DB のパフォーマンスは私のアプリケーションにとって重要です。Java では、この数字を BigDecimal として使用します。
マニュアルからの引用:
数値:小数点の前の最大131072桁。小数点以下16383桁まで
http://www.postgresql.org/docs/current/static/datatype-numeric.html
131072桁は、私が知る限り、あなたのニーズをカバーするはずです。
編集:
効率に関する質問に答えるには:
最初の最も重要な質問は、その列にどのような種類のデータが格納され、どのように使用するかということです。
決して、(実際の)数値を文字列に格納しないでください!
その列で並べ替える必要がある場合、文字データ型を使用した場合に得られるものに満足できません(たとえば2
、後に並べ替えられます10
)
効率の問題に戻ります。これは主にあなたが懸念しているスペース効率だと思います。値のスペース要件は自分で計算できます。
数値データ型のストレージ要件も文書化されています。
実際のストレージ要件は、小数点以下4桁のグループごとに2バイトに加えて、5〜8バイトのオーバーヘッドです。
したがって、20桁の場合、これは最大10バイトに5〜8バイトのオーバーヘッドを加えたものになります。だから最大。18バイト。
varchar列に20桁を格納するには、21バイトが必要です。
したがって、スペースの「効率」の観点からは、数値の方がわずかに優れています。ただし、データ型の選択は列のコンテンツの要件に基づいて行われる必要があるため、これが決定に影響を与えることはありません。
パフォーマンスの観点からも、大きな違いはないと思います。
NUMERIC の代わりに BIGINT を試してみてください。うまくいくはずです。
http://www.postgresql.org/docs/current/static/datatype-numeric.html