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 クロージャとガベージ コレクション メカニズムの例の詳細な説明

推薦する

Vueはマルチタブコンポーネントを実装します

効果を直接確認するために、リロード、左を閉じる、右を閉じる、その他の機能を閉じるなどの右クリック メ...

Reactでパスワード強度検出器を実装する方法

目次序文使用コンポーネントの記述データ構造分析プロセス分析基礎コードの分析他の要約する序文パスワード...

ベスト HTML/CSS デザインおよび開発フレームワーク 15 選を紹介します

プロフェッショナルな Web デザインは複雑で時間がかかります。 HTML と CSS フレームワー...

HTML コードの書き方に関する提案のまとめ

リソースファイルのプロトコルを省略する画像、メディアファイル、スタイル、スクリプトの URL では、...

露滴アニメーション効果を実装するための Three.js サンプル コード

序文みなさんこんにちは。CSS ウィザードの alphardex です。この記事では、three.j...

期間限定フラッシュセール機能を実現するJavaScriptタイマー

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...

JSのアンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。

アンカーリンクをクリックするとスムーズにスクロールし、自由にトップ位置に調整できます。 1. アンカ...

MySQL InnoDB ストレージ エンジンの詳細

序文MySQL では、InnoDB はストレージ エンジン レイヤーに属し、プラグインとしてデータベ...

Vueはel-tableを使用して列と行を動的に結合します

この記事の例では、el-tableを使用して列と行を動的にマージするVueの具体的なコードを参考まで...

Prometheusコンテナのデプロイメントのための実用的なソリューション

環境ホスト名IPアドレス仕えるプロメテウス192.168.237.137プロメテウス、グラファナノー...

Tik Tok サブスクリプション ボタンのアニメーション効果を実現する CSS

少し前にTik Tokを見ていて、フォローするときのボタンアニメーションがとても美しいと思ったのと、...

CentOS 7にMySQLをインストールする詳細な手順

CentOS7では、MySQLをインストールすると、MariaDBもデフォルトでインストールされます...

携帯電話番号の真ん中の4桁を隠すMySQL SQL文の方法

最初のクエリ テーブル構造 (sys_users): sys_users から * を選択します。最...

クラウドサーバーを購入し、Alibaba Cloud に Pagoda Panel をインストールする手順

アリババクラウドがサーバーを購入クラウドサーバーを購入し、サーバーバージョンとしてcentos 7....

Vueはユーザー名が使用可能かどうかの検証を実装します

この記事では、ユーザー名が使用可能かどうかを確認するためのVueの具体的なコードを例として紹介します...