mysql Explainでのkey_lenの計算方法の説明

jacklove
リリース: 2018-06-08 17:51:23
オリジナル
1980 人が閲覧しました

mysql の Explain コマンドは SQL のパフォーマンスを分析できます。その 1 つは key_len (インデックスの長さ) の統計です。この記事では、mysql の key_len の計算方法を分析して説明します。

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

CREATE TABLE `member` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` tinyint(3) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `member` (`id`, `name`, `age`) VALUES (NULL, 'fdipzone', '18'), (NULL, 'jim', '19'), (NULL, 'tom', '19');
ログイン後にコピー

2.説明を表示します

名前のフィールドタイプは

varchar(20)、文字エンコーディングはutf8です。 3 バイトの場合、key_len は 20*3=60 になるはずです。

mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+| id | select_type | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+|  1 | SIMPLE      | member | ref  | name          | name | 63      | const |    1 | Using index condition |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+
ログイン後にコピー

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 | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+|  1 | SIMPLE      | member | ref  | name          | name | 62      | const |    1 | Using index condition |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+
ログイン後にコピー

key_len は

62 で、前より 1 減りましたが、まだ 2 増えています。 NULL フィールドがさらに 1 バイトを占めることは確実です。
nameフィールドの型は可変長フィールドであるvarcharですvarcharをcharに変更して再度テストしてください

ALTER TABLE `member` CHANGE `name` `name` CHAR(20) NOT NULL;mysql> explain select * from `member` where name='fdipzone';
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+| id | select_type | table  | type | possible_keys | key  | key_len | ref   | rows | Extra                 |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+|  1 | SIMPLE      | member | ref  | name          | name | 60      | const |    1 | Using index condition |
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+
ログイン後にコピー

固定長フィールドに変更した後、key_lenは

60になります。予測と一致しています。
概要: 可変長フィールドを使用するには追加の 2 バイトが必要で、NULL を使用するには追加の 1 バイトが必要です。 そのため、インデックス付きフィールドの場合は、固定長の NOT NULL 定義を使用するのが最善です 、性能を上げる。

この記事では、mysql Explain の key_len の計算方法について説明します。さらに関連する内容については、PHP 中国語 Web サイトを参照してください。

関連する推奨事項:


phpを介してIPとソースへのアクセスをシミュレートするためにcurlを使用する方法

mysqlを介してNULLデータメソッドを変換する

可変数のパラメータを使用するphp関数に関する関連コンテンツ

以上がmysql Explainでのkey_lenの計算方法の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート