| Min. (inclusive) | Max. (inclusive)
-----------------------------------------------------------------------------
INT Signed (+|-) | -2,147,483,648 | 2,147,483,647
-----------------------------------------------------------------------------
INT Unsigned (+) | 0 | 4,294,967,295
-----------------------------------------------------------------------------
BIGINT Signed (+|-) | -9,223,372,036,854,775,807 | 9,223,372,036,854,775,806
-----------------------------------------------------------------------------
BIGINT Unsigned (+) | 0 | 18,446,744,073,709,551,615
MySQLリファレンス。
auto_incrementを持つ列ID(INT unsigned)のMySQLテーブルがあり、テーブルに4,294,967,295レコードがある場合、さらに1つのレコードを挿入しようとすると、新しいレコードのIDが自動的に変更され、最大値「4,294,967,295」に設定されます。 "、MySQLエラーメッセージが表示Duplicate entry '4294967295' for key 'PRIMARY'
されるため、列が主キーとして設定されている場合、IDが重複します。
2つの可能な解決策:
- 簡単なアプローチ:ダン・アームストロングが言ったように、IDをBIGINT unsignedに設定して、制限を拡張します。これは壊れないという意味ではありませんが!テーブルが非常に大きくなると、パフォーマンスに影響が出る可能性があります。
- より難しいアプローチ:パーティショニングを使用します。これはもう少し複雑なアプローチですが、パフォーマンスが向上し、データベースの制限はありません(唯一の制限は物理ハードディスクのサイズです)。Twitter(および同様の巨大なWebサイト)は、1日あたり数百万のツイート(レコード)にこのアプローチを使用しています!