検索

ホームページ  >  に質問  >  本文

java - テーブルの主キーに関する質問

ほとんどの主キーは、整数 (自動インクリメント) またはシステム生成の一意のコード (UUID など) のみである必要があります。それぞれの長所と短所は何かを尋ね、実際の経験について話したいと思います。

过去多啦不再A梦过去多啦不再A梦2753日前663

全員に返信(4)返信します

  • 習慣沉默

    習慣沉默2017-05-17 10:00:34

    ID の自動インクリメントによりストレージ容量が節約され、主キーインデックスには挿入と並べ替えの問題がありません。欠点は、データ量が制限されており、最大 2^63 レコードを保存できることです。
    uuid は通常文字列であり、整数よりも多くの記憶領域を消費し、挿入時にインデックスの並べ替えが必要になります。原則として数量の上限はございません。

    返事
    0
  • PHP中文网

    PHP中文网2017-05-17 10:00:34

    整数型(mysqlのインデックスはファイル形式で保存されるため、整数型はUUIDより小さい必要があります)、整数型であるためインデックス作成効率はUUIDよりも高くなければなりませんが、自動的にインクリメントされるため、 mysql は、データを挿入するときにテーブルをロックする必要があるため、大量の同時実行下では MySQL サーバーに大きなオーバーヘッドが発生します。そして、UUID は同時実行性の処理において整数の自動インクリメントよりも優れています

    返事
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-17 10:00:34

    uuid はサブライブラリをサポートします

    返事
    0
  • 習慣沉默

    習慣沉默2017-05-17 10:00:34

    フィールドが主キーの場合、整数型は文字列型よりもスペースを節約します (int は 4 バイトのみ必要で、char は 1 文字あたり 1 バイトであることを覚えておく必要があります)
    フィールドが主キーでない場合は、スペースを節約するため、整数型は文字列型よりも優れています。型ははるかに高速で、文字の長さに応じて幾何学的に増加します

    完璧を追求する人のために、IP アドレスなどのデータも整数を使用してデータベースに保存されます (IP アドレス文字列と整数には固定アルゴリズムがあります)。

    たとえば、フィールドの値が 1234567890 で主キーがない場合
    id >= '1234567890' の SQL クエリを実行する場合
    int 型は 1 回だけ比較する必要があります
    char 型はそれぞれ 10 回比較する必要がありますキャラクター 全員が比較に参加する必要があります。したがって、文字が長いほど速度は遅くなります

    データベース内のデータ量が十分に大きい場合は、同様の SQL を実行することで、char 型の処理速度を簡単にチェックできます
    where id like '123%' limit 5;
    where id like '1234%' limit 5;
    where id like '12345%'limit 5;
    where id like '123456%'limit 5;
    上記の SQL の実行速度は逆に遅くなります。文字が長いほど、比較される回数が多くなるからです。

    int 型の長さに関係なく、比較は 1 回だけです

    返事
    0
  • キャンセル返事