mysqlのkey_lenの計算方法についての簡単な説明

mysqlのkey_lenの計算方法についての簡単な説明

MySQL の explain コマンドは SQL のパフォーマンスを分析できます。その 1 つが key_len (インデックスの長さ) 統計です。この記事ではMySQLにおけるkey_lenの計算方法を分析し説明します。

1. テストテーブルとデータを作成する

テーブル「メンバー」を作成(
 `id` int(10) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(20) デフォルト NULL,
 `age` tinyint(3) unsigned DEFAULT NULL,
 主キー (`id`)、
 キー `name` (`name`)
)ENGINE=InnoDB デフォルト文字セット=utf8;

`member` (`id`, `name`, `age`) に VALUES (NULL, 'fdipzone', '18'), (NULL, 'jim', '19'), (NULL, 'tom', '19') を挿入します。

2.説明を見る

name フィールドの型はvarchar(20) 、文字エンコーディングはutf8 、1 文字は 3 バイトを占めるため、key_len は20*3=60になります。

mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+
| id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 |
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+
| 1 | SIMPLE | メンバー | ref | 名前 | 名前 | 63 | const | 1 | インデックス条件の使用 |
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+

explain の key_len は63で、 3多いです。

名前フィールドでは NULL が許可されます。名前を NOT NULL に変更して再度テストしてください。

ALTER TABLE `member` CHANGE `name` `name` VARCHAR(20) NOT NULL;

mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+
| id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 |
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+
| 1 | SIMPLE | メンバー | ref | 名前 | 名前 | 62 | const | 1 | インデックス条件の使用 |
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+

現在、key_len は 62 です。これは以前より 1 少ないですが、まだ 2 多いです。 NULL フィールドは 1 バイト余分に占有することは間違いありません。

名前フィールドの型は varchar で、可変長フィールドです。varchar をchar に変更して再度テストしてください。

ALTER TABLE `member` CHANGE `name` `name` CHAR(20) NOT NULL;

mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+
| id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 |
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+
| 1 | SIMPLE | メンバー | ref | 名前 | 名前 | 60 | const | 1 | インデックス条件の使用 |
+----+-------------+--------+-------+---------------+-------+-------+------+-----------------------+

固定長フィールドに変更した後、key_len は60 になり、予測と一致します。

概要:可変長フィールドを使用する場合は2バイト追加で必要になり、NULL を使用する場合は1バイト追加で必要になります。したがって、インデックス付きフィールドの場合、パフォーマンスを向上させるには、固定長と NOT NULL 定義を使用するのが最適です

MySQL の key_len の計算方法についての上記の簡単な説明は、編集者が皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLのkey_lenの意味と計算方法を説明します

<<:  nginx で複数の仮想ホストを設定する方法の例

>>:  js クロージャとガベージ コレクション メカニズムの例の詳細な説明

推薦する

MySQLdump コマンドを使用した MySQL データの移行

このソリューションの利点はシンプルさと使いやすさですが、欠点はダウンタイムが長くなることです。 した...

Axios の二次カプセル化の例 プロジェクトのデモ

1. なぜパッケージングを行うのですか?全体的なコード呼び出し、リクエストの公開処理、パーソナライズ...

CSS のインライン スタイルに変換するソリューション (css-inline)

シーンについて話すメールを送信サードパーティのウェブサイトにHTMLを埋め込む他の編集者の記事をコピ...

MySQL シャーディングの詳細

1. ビジネスシナリオの紹介MySQLを使用する電子商取引システムがあるとします。大量のデータを保存...

VMware ワークステーション 12 に Ubuntu 14.04 (64 ビット) をインストール

1. インストール環境コンピュータモデル: Lenovo Y471a (i5) ノートパソコンシステ...

CentOS7 デプロイメント Flask (Apache、mod_wsgi、Python36、venv)

1. Apacheをインストールする # yum インストール -y httpd httpd-de...

Vueドロップダウンリストの2つの実装方法の比較

Vueドロップダウンリストの2つの実装最初の方法はv-forを使用する <el-select ...

MySQL でコミットされていないトランザクション情報を見つける方法

少し前に、「ORACLE でコミットされていないトランザクションの SQL ステートメントを見つける...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

HTML で js を使用してローカル システム時間を取得する

コードをコピーコードは次のとおりです。 <div id="名前"> ...

Windows が MySQL サービスを開始できず、エラー 1067 を報告する場合の解決策

突然、MySQLにログインすると、アクセスが拒否されたか、データベースに接続できないと表示されました...

Vue でシンプルな無限ループスクロールアニメーションを実装する例

この記事では主に、Vue でシンプルな無限ループスクロールアニメーションを実装し、みんなで共有する例...

MySQL データベースの高度なクエリとマルチテーブルクエリ

MySQL マルチテーブルクエリワークシートを追加する -- ユーザーテーブル (ユーザー) テーブ...