explain執行計劃中的key_len的計算規則
它的規則如下:
1.所有的索引欄位,如果沒有設定not null,則需要加一個位元組。
2.定長欄位,int佔四個位元組、date佔三個位元組、char(n)佔n個字元。
3.對於變成欄位varchar(n),則有n個字元+兩個位元組。
4.不同的字符集,一個字元佔用的位元組數不同。latin1編碼的,一個字元佔用一個位元組,gbk編碼的,一個字元佔用兩個位元組,utf8編碼的,一個字元佔用三個位元組。
舉例說明:
mysql> desc person;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | varchar(100) | NO | PRI | | |
| name | varchar(100) | YES | MUL | NULL | |
| age | int(10) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
檢視索引情況:
mysql> show index from person;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| person | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| person | 1 | idx_name | 1 | name | A | 2 | NULL | NULL | YES | BTREE | | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
mysql> explain select name from person;
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
| 1 | SIMPLE | person | index | NULL | idx_name | 103 | NULL | 2 | Using index |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)
根據以上計算規則:
所有的索引欄位,如果沒有設定not null,則需要加一個位元組
對於變成欄位varchar(n),則有n個字元+兩個位元組
因此:key_len=100+2+1=103
1.所有的索引欄位,如果沒有設定not null,則需要加一個位元組。
2.定長欄位,int佔四個位元組、date佔三個位元組、char(n)佔n個字元。
3.對於變成欄位varchar(n),則有n個字元+兩個位元組。
4.不同的字符集,一個字元佔用的位元組數不同。latin1編碼的,一個字元佔用一個位元組,gbk編碼的,一個字元佔用兩個位元組,utf8編碼的,一個字元佔用三個位元組。
舉例說明:
mysql> desc person;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | varchar(100) | NO | PRI | | |
| name | varchar(100) | YES | MUL | NULL | |
| age | int(10) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
檢視索引情況:
mysql> show index from person;
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| person | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| person | 1 | idx_name | 1 | name | A | 2 | NULL | NULL | YES | BTREE | | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
mysql> explain select name from person;
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
| 1 | SIMPLE | person | index | NULL | idx_name | 103 | NULL | 2 | Using index |
+----+-------------+--------+-------+---------------+----------+---------+------+------+-------------+
1 row in set (0.00 sec)
根據以上計算規則:
所有的索引欄位,如果沒有設定not null,則需要加一個位元組
對於變成欄位varchar(n),則有n個字元+兩個位元組
因此:key_len=100+2+1=103
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2138031/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL執行計劃explain的key_len解析MySqlAI
- FAQ系列|解讀EXPLAIN執行計劃中的key_lenAI
- oracle執行計劃的使用(EXPLAIN)OracleAI
- explain執行計劃分析AI
- mysql執行計劃explainMySqlAI
- mysql explain 執行計劃MySqlAI
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- mysql 基於規則的執行計劃MySql
- MySQL執行計劃裡面的key_lenMySql
- Explain執行計劃詳解AI
- explain 查詢執行計劃AI
- mysql 基於規則的執行計劃(二)MySql
- 執行計劃-3:解釋規則
- 【Explain Plan】檢視SQL的執行計劃AISQL
- MySQL Explain執行計劃 - 詳解MySqlAI
- 十六、Mysql之Explain執行計劃MySqlAI
- mysql explain 執行計劃詳解MySqlAI
- MySQL執行計劃EXPLAIN詳解MySqlAI
- ORACLE執行計劃 explain說明OracleAI
- 計算表掃描中執行計劃的COST
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- mysql調優之——執行計劃explainMySqlAI
- Oracle執行計劃Explain Plan 如何使用OracleAI
- MongoDb學習之Explain執行計劃MongoDBAI
- Explain For理論執行計劃相關AI
- Oracle 執行計劃(Explain Plan) 說明OracleAI
- Oracle 執行計劃(Explain Plan) 說明OracleAI
- MySQL explain執行計劃詳細解釋MySqlAI
- mysql之 explain、optimizer_trace 執行計劃MySqlAI
- 使用EXPLAIN PLAN來檢視執行計劃AI
- TOAD中檢視執行計劃(Explain Plan)AI
- 配置oracle 解釋執行計劃--explain planOracleAI
- MySQL explain 中 key_len的詳解MySqlAI
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- 執行計劃執行步驟原則
- Hive底層原理:explain執行計劃詳解HiveAI
- MySQL執行計劃explain輸出列結果解析MySqlAI
- 【最佳化】explain plan for 方式存取執行計劃AI