MySQL の主キーがクエリを高速化するために数値を使用するか UUID を使用するかについての簡単な分析

MySQL の主キーがクエリを高速化するために数値を使用するか UUID を使用するかについての簡単な分析

実際の開発では、MySQL の主キーは重複できず、主キーが自動的にインクリメントされることがあります。主キーの重複を防ぐために、スノーフレーク アルゴリズムなどのアルゴリズムが採用されることがあります。どちらのタイプの主キーも数値型として保存されますが、実際の開発では、uuid が主キーとして生成されることがあります。では、どちらの主キーの方が効率的でしょうか。

テストによって次のことが検証されます。

1. まず、テーブルを作成し、ストアド プロシージャを使用して 100 万個のデータを生成し、分析します。

テーブルを作成します。

テーブル `my_tables` を作成します (
`id` VARCHAR(32) NOT NULL ,
`name` varchar(32) デフォルト NULL,
`age` int(32) デフォルト NULL,
`time` varchar(32) デフォルト NULL,
`pwd` varchar(32) デフォルト NULL,
主キー (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 デフォルトCHARSET=utf8;

ストアド プロシージャを作成します。

my_insert が存在する場合はプロシージャを削除します。
プロシージャ my_insert() を作成する
始める
n int DEFAULT 1 を宣言します。
ループ名:LOOP
`my_tables`(`name`,`age`,`time`,`pwd`) に VALUES ('张三', 18, '0:0:0:0:0:0:0:1', '369') を挿入します。
n=n+1 を設定します。
n=1000000の場合
LEAVE ループ名;
終了の場合;
END LOOP ループ名;
終わり;

データの生成:

my_insert() を呼び出します。

最初の方法では、数値型の主キーを使用します。

次の図は分析を説明すると得られる。

2. 次に、別のテーブルを作成し、データを生成します。

テーブル `my_tables2` を作成します (
`id` VARCHAR(32) NOT NULL ,
`name` varchar(32) デフォルト NULL,
`age` int(32) デフォルト NULL,
`time` varchar(32) デフォルト NULL,
`pwd` varchar(32) デフォルト NULL,
主キー (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 デフォルトCHARSET=utf8;

注: このテーブルの主キーは varchar 型です。

ストアド プロシージャを作成し、データを生成します。

proc_insert が存在する場合はプロシージャを削除します。
区切り文字 $
プロシージャ pro_insert2() を作成します。
始める
i INT DEFAULT 1 を宣言します。
i<=1000000の間
`my_tables2`(id,`name`,`age`,`time`,`pwd`) に VALUES (i,'张三', 18, '0:0:0:0:0:0:0:1', '369') を挿入します。
i = i+1 を設定します。
終了しながら;
終了$;

pro_insert2() を呼び出します。

次の図は、主キーを使用した2番目のクエリの結果を示しています。

説明が理解できない場合は、ブログをご覧ください https://blog.csdn.net/why15732625998/article/details/80388236

分析により、uuid または数値を主キーとして使用した場合のクエリ効率の違いは予想ほど大きくなく、ほとんど無視できることがわかりました。key_len のみがわずかに異なります。

key_len: インデックスで使用されるバイト数を示します。この列は、クエリで使用されるインデックスの長さを計算するために使用できます。不損失精確性的情況下,長度越短越好。 key_len によって表示される値は、インデックス フィールドの最大可能長であり、実際に使用される長さではありません。つまり、key_len はテーブル定義に基づいて計算され、テーブルから取得されるものではありません。

これで、MySQL の主キーに数値を使用するか UUID を使用するかのどちらが速いかについての記事は終了です。MySQL の主キーに数値を使用するか UUID を使用するかの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL クエリの最適化: 非主キー結合クエリの例の代わりにサブクエリを使用する
  • MySQL 主キークエリがなぜ高速なのかの詳細な説明

<<:  面白いウェブサイトをデザインするための方法とテクニック(写真)

>>:  CSS3+JavaScript を使用したクールな呼吸効果のサンプル コード

推薦する

Vue はグラフィック検証コードログインを実装します

この記事では、グラフィック認証コードログインを実装するためのVueの具体的なコードを参考までに紹介し...

jsを使用して中国語からピンインへの変換の完全な手順を実行します

jsを使用して、中国語をピンインに変換するパッケージを作成しました。倉庫のアドレスはpinyin-p...

VMware に CentOS7 をインストールし (静的 IP アドレスを設定)、Docker コンテナ経由で mySql データベースをインストールする (非常に詳細なチュートリアル)

2 年生から、これらのインストールと設定の仕方を尋ねられました。簡単なチュートリアルを作成し、ここ...

JavaScript タイピングゲーム

この記事では、タイピングゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

Win10 MySQLでCSVをエクスポートする2つの方法

Win10 で csv をエクスポートする方法は 2 つあります。1 つ目はツールを使用することです...

Vue3 の ref toRef と toRefs の違いを理解する方法

目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...

シームレスなカルーセル効果を実現するネイティブ js

参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...

ウェブサイト制作におけるオンライン広告の新しいインタラクティブ体験(グラフィックチュートリアル)

インターネット時代が成熟するにつれて、オンライン広告の発展も加速しています。圧倒的な広告収入と完璧な...

Centos7 での nginx のインストールと設定に関する詳細なチュートリアル

注: ソフトウェアのインストールの基本ディレクトリ パスは /usr/local です。ソフトウェア...

親コンテナの CSS 均等分割 (完全三分の一) の実装

親コンテナの幅は固定されています。子要素が親の幅を均等に分割するには、どのような方法がありますか?コ...

MySQL無料インストールバージョンの設定チュートリアル

この記事では、参考までにMySQLの無料インストール構成チュートリアルを紹介します。具体的な内容は次...

MySQLで負荷分散を実装する方法

序文MySQL は、クライアント/サーバー構造に基づく、高速、高性能、マルチスレッドのオープン ソー...

CSSレイアウトにおけるフロート属性と位置属性の違い

CSS レイアウト - position プロパティposition 属性は、要素に適用する配置方法...

JSは写真の自動再生効果を実現します

この記事では、写真の自動再生効果を実現するためのJSの具体的なコードを参考までに紹介します。具体的な...

Vue における属性とプロパティの具体的な使用法と違い

目次Vue.jsにおける属性とプロパティ値および関連する処理として属性とプロパティの概念属性とプロパ...