web-dev-qa-db-ja.com

MySQLにおけるINTとUUIDの違い

primary keyINT type(AUTO_INCREMENT)またはUUIDに設定します。これら2つのデータベースのパフォーマンスの違い(SELECTINSERTなど)とその理由は何ですか。

20
孙为强

UUIDユニバーサルユニークID を返します(別のDBにインポートされている場合も同様にユニークです)。

MySQL文書から引用するには(私の強調):

UUIDは空間と時間においてグローバルに一意である番号として設計されています。 UUID()への2つの呼び出しは、2つの異なる値これらの呼び出しが2つの別個のコンピューターで実行されている場合でもが互いに接続されていないことを生成すると予想されます。

一方、単にINTプライマリIDキー(たとえばAUTO_INCREMENT)は、の一意の整数を返します特定のDBとDBテーブルですが、これは普遍的に一意ではないです(したがって、別のDBにインポートすると、主キーの競合が発生する可能性があります)。

パフォーマンスに関しては、UUIDよりも_auto-increment_を使用した場合でも、目立った違いはありません。ほとんどの投稿(このサイトの作成者による一部を含む)は、そのように述べています。もちろん、UUIDには少し時間がかかります(そしてスペースもかかります)が、これは(すべてではないにしても)ほとんどの場合のパフォーマンスのボトルネックにはなりません。列を_Primary Key_として持つと、両方の選択がパフォーマンスと同等になります。以下の参考文献を参照してください。

  1. UUIDに、またはUUIDにしないか?
  2. 神話、GUID vs Autoincrement
  3. パフォーマンス:UUID vs _auto-increment_ in cakephp-mysql
  4. UUID MySQLでのパフォーマンス?
  5. 主キー:IDsとGUIDs(コーディングホラー)

UUID対_auto-increment_のパフォーマンス結果、 Myths、GUIDAutoincrement

enter image description here

UUID pros/consPrimary Keys:IDs vs GUIDs から適用)

GUID長所

  • すべてのテーブル、すべてのデータベース、すべてのサーバーにわたって一意
  • 異なるデータベースのレコードを簡単にマージできます
  • 複数のサーバーにデータベースを簡単に分散できます
  • IDsは、データベースへのラウンドトリップの代わりに、どこにでも生成できます
  • とにかく、ほとんどのレプリケーションシナリオではGUID列が必要です

GUID短所

  • これは、従来の4バイトのインデックス値の4倍です。注意しないと、パフォーマンスとストレージに深刻な影響を与える可能性があります
  • デバッグが面倒(_where userid='{BAE7DF4-DDF-3RG-5TY3E3RF456AS10}'_)
  • 生成されたGUIDsは、最高のパフォーマンス(例:SQL 2005のnewsequentialid())を実現し、クラスター化インデックスの使用を可能にするために、部分的にシーケンシャルである必要があります。


注意

私は言及されたリファレンスを注意深く読み、ユースケースに応じてUUIDを使用するかどうかを決定します。そうは言っても、多くの場合、UUIDsが実際に望ましいでしょう。たとえば、データベースをまったく使用またはアクセスせずにUUIDsを生成したり、事前に計算したり、他の場所に格納したUUIDsを使用したりすることもできます。さらに、IDsの破損や競合の心配をせずに、データベーススキーマやクラスタリングスキームを簡単に一般化/更新できます。

30
Nikos M.

UUIDキーは、DBに永続化されない限りpkになることができないため、トランザクションが成功しない限り、そのpkを想定することはできません。 UUIDのほとんどは、時間ベース、Macベース、名前ベース、またはランダムなUUIDを使用します。コンテナーベースの展開に大きく移行していて、MACアドレスに依存するシーケンスMACアドレスを開始するパターンが機能しないことを考えると、システムが常に正確な時刻同期をとっているという仮定は、時計がルールに準拠しないために正しくない場合があるため、時間ベースは保証されません。 GUID衝突が発生しないことを保証することはできません。特定の短期間に衝突が発生することはありませんが、十分な時間とシステムが並行して実行され、保証されるシステムの急増は最終的に失敗します。[- http://www.ietf.org/rfc/rfc4122.txt]

2
Rohitdev