前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql中索引长度key_len探索

Mysql中索引长度key_len探索

作者头像
九转成圣
发布2024-05-24 11:19:58
370
发布2024-05-24 11:19:58
举报
文章被收录于专栏:csdn

Mysql中索引长度key_len探索

表结构

代码语言:javascript
复制
mysql> desc emp;
+--------------+---------------+------+-----+-------------------+-----------------------------+
| Field        | Type          | Null | Key | Default           | Extra                       |
+--------------+---------------+------+-----+-------------------+-----------------------------+
| empno        | int(10)       | NO   | PRI | NULL              | auto_increment              |
| ename        | varchar(50)   | YES  | MUL | NULL              |                             |
| job          | varchar(100)  | YES  |     | NULL              |                             |
| mgr          | int(10)       | YES  |     | NULL              |                             |
| hiredate     | datetime      | YES  |     | NULL              |                             |
| sal          | decimal(10,2) | YES  |     | NULL              |                             |
| comm         | decimal(10,2) | YES  |     | NULL              |                             |
| deptno       | int(11)       | YES  |     | NULL              |                             |
| created_time | datetime      | YES  |     | CURRENT_TIMESTAMP |                             |
| updated_time | datetime      | YES  |     | NULL              | on update CURRENT_TIMESTAMP |
| is_deleted   | tinyint(1)    | YES  |     | 0                 |                             |
| version      | int(1)        | YES  |     | 1                 |                             |
+--------------+---------------+------+-----+-------------------+-----------------------------+
12 rows in set (0.07 sec)

表中的索引

代码语言:javascript
复制
mysql> show index from emp;
+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name       | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| emp   |          0 | PRIMARY        |            1 | empno       | A         |          48 | NULL     | NULL   |      | BTREE      |         |               |
| emp   |          1 | idx_ename      |            1 | ename       | A         |          24 | NULL     | NULL   | YES  | BTREE      |         |               |
| emp   |          1 | idx_mgr        |            1 | mgr         | A         |           7 | NULL     | NULL   | YES  | BTREE      |         |               |
| emp   |          1 | idx_hiredate   |            1 | hiredate    | A         |          20 | NULL     | NULL   | YES  | BTREE      |         |               |
| emp   |          1 | idx_sal        |            1 | sal         | A         |           7 | NULL     | NULL   | YES  | BTREE      |         |               |
| emp   |          1 | idx_is_deleted |            1 | is_deleted  | A         |           2 | NULL     | NULL   | YES  | BTREE      |         |               |
+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
6 rows in set (0.08 sec)

explain

代码语言:javascript
复制
mysql> explain select * from emp where ename = '张三';
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key       | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | emp   | NULL       | ref  | idx_ename     | idx_ename | 153     | const |   20 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+----------+-------+
1 row in set (0.10 sec)

mysql>

key_len

到底key_len是怎么计算出来的?

各种数据类型计算规则如下:

char和varchar类型key_len计算公式:
  1. varchr(N)变长字段且允许NULL = N * ( character set:utf8mb4为4字节,utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段)
  2. varchr(N)变长字段且不允许NULL = N * ( character set:utf8mb4为4字节,utf8=3,gbk=2,latin1=1)+2(变长字段)
  3. char(N)固定字段且允许NULL = N * ( character set:utf8mb4为4字节,utf8=3,gbk=2,latin1=1)+1(NULL)
  4. char(N)固定字段且不允许NULL = N * ( character set:utf8mb4为4字节,utf8=3,gbk=2,latin1=1)
数值数据的key_len计算公式:
  1. TINYINT允许NULL = 1 + 1(NULL)
  2. TINYINT不允许NULL = 1
  3. SMALLINT允许为NULL = 2+1(NULL)
  4. SMALLINT不允许为NULL = 2
  5. INT允许为NULL = 4+1(NULL)
  6. INT不允许为NULL = 4
  7. 日期时间型的key_len计算:(针对mysql5.5及之前版本)
  8. DATETIME允许为NULL = 8 + 1(NULL)
  9. DATETIME不允许为NULL = 8
  10. TIMESTAMP允许为NULL = 4 + 1(NULL)
  11. TIMESTAMP不允许为NULL = 4
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 表结构
  • explain
  • key_len
    • 各种数据类型计算规则如下:
      • char和varchar类型key_len计算公式:
      • 数值数据的key_len计算公式:
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档