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 執行計劃MySqlAI
- explain執行計劃分析AI
- mysql執行計劃explainMySqlAI
- (4) MySQL中EXPLAIN執行計劃分析MySqlAI
- Explain執行計劃詳解AI
- explain 查詢執行計劃AI
- 執行計劃-3:解釋規則
- mysql explain 執行計劃詳解MySqlAI
- 十六、Mysql之Explain執行計劃MySqlAI
- MySQL Explain執行計劃 - 詳解MySqlAI
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- Oracle執行計劃Explain Plan 如何使用OracleAI
- mysql調優之——執行計劃explainMySqlAI
- MongoDb學習之Explain執行計劃MongoDBAI
- MySQL explain 中 key_len的詳解MySqlAI
- MySQL explain執行計劃詳細解釋MySqlAI
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- Hive底層原理:explain執行計劃詳解HiveAI
- 執行計劃執行步驟原則
- 檢視一個正在執行的sql的執行計劃(explain for connection processlist_id)SQLAI
- MySQL調優篇 | EXPLAIN執行計劃解讀(4)MySqlAI
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- SQLSERVER中得到執行計劃的方式SQLServer
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- MySQL優化從執行計劃開始(explain超詳細)MySql優化AI
- 執行計劃-1:獲取執行計劃
- javascript關於toFixed的計算規則JavaScript
- MySql中執行計劃如何來的——Optimizer TraceMySql
- SqlServer的執行計劃如何分析?SQLServer
- sqm執行計劃的繫結
- C# sizeof 計算規則C#
- 在Oracle中,如何得到真實的執行計劃?Oracle
- drools執行指定的規則
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- drools執行完某個規則後終止別的規則執行
- mysql的explain執行計劃的描述,實習遇到的對之前沒有重視到的type和extraMySqlAI
- Oracle檢視執行計劃的命令Oracle