明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

對于mysql explain中key_len的計算方法講解

[摘要]mysql的explain命令可以分析sql的性能,其中有一項是key_len(索引的長度)的統(tǒng)計。本文將分析mysql explain中key_len的計算方法。 1.創(chuàng)建測試表及數(shù)據(jù)CREATE...

mysql的explain命令可以分析sql的性能,其中有一項是key_len(索引的長度)的統(tǒng)計。本文將分析mysql explain中key_len的計算方法。

1.創(chuàng)建測試表及數(shù)據(jù)

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.查看explain

name的字段類型是varchar(20),字符編碼是utf8,一個字符占用3個字節(jié),那么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。
name字段是允許NULL,把name改為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  
+----+-------------+--------+------+---------------+------+---------+-------+------+-----------------------+

現(xiàn)在key_len為62,比剛才少了1,但還是多了2?梢源_定,字段為NULL會多占用一個字節(jié)。
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個字節(jié),使用NULL需要額外增加1個字節(jié),因此對于是索引的字段,最好使用定長和NOT NULL定義,提高性能。

本篇文章講解了mysql explain中key_len的計算方法,更多相關內(nèi)容請關注php中文網(wǎng)。

相關推薦:
如何通過php 使用curl模擬ip和來源進行訪問

通過mysql 轉(zhuǎn)換NULL數(shù)據(jù)方法

關于php 函數(shù)使用可變數(shù)量的參數(shù)的相關內(nèi)容

以上就是關于mysql explain中key_len的計算方法講解的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。