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 定義を使用するのが最善です 、性能を上げる。
phpを介してIPとソースへのアクセスをシミュレートするためにcurlを使用する方法
可変数のパラメータを使用するphp関数に関する関連コンテンツ
以上がmysql Explainでのkey_lenの計算方法の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。