MySQL执行计划中key_len详解
(1).索引字段的附加信息:可以分为变长和定长数据类型讨论,当索引字段为定长数据类型,比如char,int,datetime,需要有是否为空的标记,这个标记需要占用1个字节;对于变长数据类型,比如:varchar,除了是否为空的标记外,还需要有长度信息,需要占用2个字节;
(备注:当字段定义为非空的时候,是否为空的标记将不占用字节)
(2).同时还需要考虑表所使用的字符集,不同的字符集,gbk编码的为一个字符2个字节,utf8编码的一个字符3个字节;
先看定长数据类型的一个例子(编码为gbk):
root@test 07:32:39>create table test_char(id int not null ,name_1 char(20),name_2 char(20), -> primary key(id),key ind_name(name_1,name_2))engine=innodb charset=gbk; root@test 07:33:55>insert into test_char values(1,’xuancan’,'taobaodba’); root@test 07:34:55>explain select * from test_char where name_1=’xuancan’\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test_char type: ref possible_keys: ind_name key: ind_name key_len: 41 ref: const rows: 1 Extra: Using where; Using index key_len=41=20*2+1(备注:由于name_1为空,isnull的标记被打上,需要计算1个字节) root@test 07:35:31>explain select * from test_char where name_1=’xuancan’ and name_2=’taobaodba’\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test_char type: ref possible_keys: ind_name key: ind_name key_len: 82 ref: const,const rows: 1 Extra: Using where; Using index key_len=82=20*2+20*2+1+1(备注:由于name_1,name_2两列被使用到,但两列都为为空,需要计算2个字节)
变长数据类型(gbk编码):
root@test 08:30:51>create table test_varchar(id int not null ,name_1 varchar(20),name_2 varchar(20), -> primary key(id),key ind_name(name_1,name_2))engine=innodb charset=gbk; root@test 08:37:51>insert into test_varchar values(1,’xuancan’,'taobaodba’); root@test 08:38:14>explain select * from test_varchar where name_1=’xuancan’\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test_varchar type: ref possible_keys: ind_name key: ind_name key_len: 43 ref: const rows: 1 Extra: Using where; Using index key_len=43=20*2+1+2(备注:由于为name_1字段定义为空,所以需要计算1,;同时由于是变长字段varchar,所以需要加上2) root@test 08:38:46>alter table test_varchar modify column name_1 varchar(20) not null; Query OK, 1 row affected (0.52 sec) Records: 1 Duplicates: 0 Warnings: 0 root@test 08:42:11>explain select * from test_varchar where name_1=’xuancan’\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: test_varchar type: ref possible_keys: ind_name key: ind_name key_len: 42 ref: const rows: 1 Extra: Using where; Using index key_len=42=20*2+2(备注由于name_1字段修改为not null之后,isnull的标记锁占用的字节释放掉,但是变长字段长度所占用的2个字节没有释放); 上面是测试gbk编码的测试,同时也可以测试一下其他编码的key_len计算。
MySQL执行计划中key_len详解的更多相关文章
- MySQL 执行计划中Extra(Using where,Using index,Using index condition,Using index,Using where)的浅析
关于如何理解MySQL执行计划中Extra列的Using where.Using Index.Using index condition,Using index,Using where这四者的区别 ...
- oracle获取执行计划及优缺点 详解
一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了):1. explain plan for获取: 2. set autotrace on : 3. statistics_leve ...
- MySQL 执行计划中Extra的浅薄理解
1.using where: Extra中出现“Using where”,通常来说,意味着全表扫描或者在查找使用索引的情况下,但是还有查询条件不在索引字段当中. 如果需要回表也是用这个. 2.usin ...
- MySQL执行计划extra中的using index 和 using where using index 的区别
本文出处:http://www.cnblogs.com/wy123/p/7366486.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- 读懂MySQL执行计划
原文:https://mp.weixin.qq.com/s/-BlLvBKcF-yalELY7XkqaQ 前言 在之前的面试过程中,问到执行计划,有很多童鞋不知道是什么?甚至将执行计划与执行时间认为是 ...
- MySQL 执行计划explain详解
MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...
- MySQL 执行计划详解
我们经常使用 MySQL 的执行计划来查看 SQL 语句的执行效率,接下来分析执行计划的各个显示内容. EXPLAIN SELECT * FROM users WHERE id IN (SELECT ...
- 解读EXPLAIN执行计划中的key_len(转)
原文:http://imysql.com/2015/10/20/mysql-faq-key-len-in-explain.shtml 导读 EXPLAIN中的key_len一列表示什么意思,该如何解读 ...
- MySQL执行计划 EXPLAIN参数
MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...
随机推荐
- Postman-简单使用
Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins Postman功能(https://www.getpostman.com/features) 主要用于模拟网 ...
- 使用语句查询mssql死锁
select spid, blocked, loginame, last_batch, status, cmd, hostname, program_name from sys.sysprocesse ...
- 自然数的K次幂的数列求和
------------------------------------------------------------------------------- 转载请注明出处 博客园 刺猬的温 ...
- java基础学习总结——this关键字
一.this关键字
- linux xwiki搭建过程
安装mysql数据库,并创建xwiki数据库及用户 mysql> create database xwiki; Query OK, 1 row affected (0.00 sec) mysql ...
- 我的WebService入门
ERP: 1. Data Layer: (ProductInfoDBHelper.cs) /// <summary> /// 获取门店图片信息 /// </summary> p ...
- vimium: 浏览器神器
chrome firefox 都有 vimium (firefox 中为vimfx), 快捷键也差不多 下边是chrome中快捷键示意图: G = shift + g (其他同理) c+e = ctr ...
- 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写
好久没有更新了... 主要内容: 缓存简介 页高速缓存 页回写 1. 缓存简介 在编程中,缓存是很常见也很有效的一种提高程序性能的机制. linux内核也不例外,为了提高I/O性能,也引入了缓存机制, ...
- 我的Linux随笔目录
现在整理博客的时间少了,大多是在用为知笔记收藏和整理,一次集中发点Linux相关随笔整理和一个目录,是按时间顺序来的.每一篇都是自己用过之后整理的,应用场景已经尽可能的说明了,不明白的可以Q我,上班时 ...
- Dynamic CRM 2015学习笔记 系列汇总
这里列出所有 Dynamic CRM 2015学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址:Dynamic CRM 2015学习笔记 系列汇总 一 ...