[解決済み] MySQLにおけるUUIDのパフォーマンス?
質問
私たちは、MySQLデータベースの主キーとしてUUID値を使用することを検討しています。挿入されるデータは、数十、数百、あるいは数千のリモート コンピューターから生成され、毎秒 100 ~ 40,000 挿入の速度で挿入され、更新は決して行いません。
データベース自体は、通常、データのカリングを開始する前に約 5,000 万レコードに達するので、巨大なデータベースではありませんが、小さいわけでもありません。私たちはまた、InnoDB で実行することを計画していますが、私たちが行っていることに適したエンジンがあれば、それを変更することも可能です。
私たちは、Java のタイプ 4 UUID を使用する準備ができていましたが、テストではいくつかの奇妙な動作が見られました。たとえば、私たちは varchar(36) として保存していますが、binary(16) を使用する方がよいということに気づきました (ただし、どの程度よいかはわかりません)。
より大きな疑問は、50M のレコードがある場合、このランダムなデータがインデックスをどれほど悪化させるかということです。たとえば、左端のビットがタイムスタンプされたタイプ 1 の UUID を使用した方が良いのでしょうか?あるいは、UUIDを完全に捨てて、自動インクリメントの主キーを検討すべきでしょうか?
私は、異なるタイプの UUID が MySQL のインデックス/主キーとして格納される場合のパフォーマンスに関する一般的な考え/ヒントを探しています。ありがとうございます。
どのように解決するのですか?
UUIDとは、Universally Unique IDのことです。ここで考えるべきはUniversallyの部分です。
あなたは 本当に は普遍的に一意である必要があるのでしょうか?もしそうなら、UUID が唯一の選択肢になるかもしれません。
私が強くお勧めするのは、もし する を使用する場合は、文字列としてではなく数値として保存することを強くお勧めします。50M 以上のレコードがある場合、ストレージ スペースを節約することでパフォーマンスが向上します (どの程度かは言えませんが)。
ID が普遍的に一意である必要がない場合、テーブル内で ID が一意であることを保証する auto_increment を使用するより良い方法はないと思います (値は毎回増加するため)。
関連
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] 0.1fを0にすると、なぜ10倍もパフォーマンスが落ちるのですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLデータベースの名前を素早く変更する(スキーマ名を変更する)方法は?
-
[解決済み] GUIDとUUIDの違いは何ですか?
-
[解決済み] PythonでGUID/UUIDを作成する方法
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySqlの整数インデックスと文字列インデックスの失敗または暗黙の変換問題
-
MySQLデータ型の詳細
-
MySQLインデックスベースストレステストの実装
-
Mysqlのソート機能の詳細
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
sql エラーを解決する オペランドには1つの列が含まれている必要があります。
-
[解決済み] Ubuntu linux上で動作するリモートMySQLサーバーを再起動する方法は?
-
[解決済み] Mysqlでidを使用してテーブルから多くの行を削除する
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?