67

私は、1日あたり1万から2万行について話すデータで急速に満たされているデータベースを持っています。

自動インクリメントオプション付きのIDの制限は何ですか?IDがINTEGERとして作成されている場合、符号なしの値に対して最大値2,147,483,647を実行できますか?

しかし、自動インクリメントがこれを超えるとどうなりますか?それはすべて崩壊しますか?では、解決策は何でしょうか?

多くの人が大きなデータベースを持っていると思いますので、ぜひ聞いてみたいと思います。

ありがとうございました。

4

2 に答える 2

73

それが範囲外に急速に成長することを心配している場合は、PKをUNSIGNEDBIGINTとして設定します。これにより、最大値18446744073709551615が得られます。これで十分です。

于 2012-05-22T17:37:31.043 に答える
43
                    | 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つの可能な解決策:

  1. 簡単なアプローチ:ダン・アームストロングが言ったように、IDをBIGINT unsignedに設定して、制限を拡張します。これは壊れないという意味ではありませんが!テーブルが非常に大きくなると、パフォーマンスに影響が出る可能性があります。
  2. より難しいアプローチパーティショニングを使用します。これはもう少し複雑なアプローチですが、パフォーマンスが向上し、データベースの制限はありません(唯一の制限は物理ハードディスクのサイズです)。Twitter(および同様の巨大なWebサイト)は、1日あたり数百万のツイート(レコード)にこのアプローチを使用しています!
于 2013-12-22T12:37:17.660 に答える