java - テーブルの主キーに関する質問
过去多啦不再A梦
过去多啦不再A梦 2017-05-17 09:58:34
0
4
626

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

过去多啦不再A梦
过去多啦不再A梦

全員に返信(4)
習慣沉默

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

いいねを押す +0
Ty80

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

いいねを押す +0
淡淡烟草味

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

いいねを押す +0
習慣沉默

フィールドが主キーの場合、整数型は文字列型よりもスペースを節約します (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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!