web-dev-qa-db-ja.com

自動インクリメントIDMySQLに使用するINTのサイズ

現在、30以上のテーブルデータベースのすべての自動インクリメントID列にINT(21)*を使用しています。

私たちはブログサイトであり、メンバー、コメント、ブログ投稿などを格納するテーブルがあります。

INT(21)id列の制限に達することはないと確信しており、次のことを知りたいと思います。

  • INT(21)を使用する必要がないと確信している場合は、スペースの無駄です。
  • 無駄な場合、自動インクリメントID列の推奨サイズはどれくらいですか

*私のデザインではありません。これをINT(10)と言うように減らすことを検討しているので、これを求めています。

29

括弧内の値は表示幅です

[It]アプリケーションは、列に指定された幅よりも小さい幅の整数値をスペースで左パディングして表示するために使用できます。 (つまり、この幅は、結果セットとともに返されるメタデータに存在します。使用されるかどうかは、アプリケーションによって異なります。)

表示幅は、列に格納できる値の範囲や、列に指定された幅を超える値に対して表示される桁数を制限しません。たとえば、INT(3)として指定された列の通常のINTの範囲は-2147483648〜2147483647であり、3文字で許可される範囲外の値は3文字を超えて表示されます。

結論

INT(10)またはINT(21)は、保存できる値に影響を与えません。本当に懸念がある場合は、データ型を簡単にBIGINTに変更でき、私が認識している影響はありません。特定の期間(つまり、1か月)に作成されている新しいレコードの数を調べ、その履歴に基づいてINT値を最大化するのにかかる時間を確認します。

36
OMG Ponies

各intタイプの制限については、ここを参照してください: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

INT(21) == INT(100000)に注意してください。括弧内の数字は、フィールドにゼロを埋め込むように指定した場合に、それに埋め込まれるゼロの数です。

署名されていないintフィールドは、最大4294967295レコードを保持できます(上記のリンクを参照)。

5
Amy B

スペースをとりすぎないでください。スペースは安いです。超えないことがわかっている列タイプを選択してください。 smallintを選択してスペースを節約すると、データベースがデータを保持できなくなると問題が発生します。

2
Galen