一、 数据表staff

现有数据表staff,字符集utf8,并创建有一些字段单独索引及组合索引index_age_birth_salary包含三个字段:
sf_age tinyint DEFAULT NULL,
sf_birthday date DEFAULT NULL,
sf_salary int DEFAULT NULL,

CREATE TABLE `staff` (`sf_id` int NOT NULL AUTO_INCREMENT,`sf_name` varchar(10) DEFAULT NULL,`sf_gender` tinyint(1) DEFAULT NULL COMMENT '0:女 1:男',`sf_age` tinyint DEFAULT NULL,`sf_birthday` date DEFAULT NULL,`sf_email` varchar(20) DEFAULT NULL,`sf_salary` int DEFAULT NULL,`sf_phone` char(11) DEFAULT NULL,`sf_dpt` varchar(20) DEFAULT NULL,PRIMARY KEY (`sf_id`),KEY `index_age` (`sf_age`),KEY `index_salary` (`sf_salary`),KEY `index_age_birth_salary` (`sf_age`,`sf_birthday`,`sf_salary`),KEY `index_name` (`sf_name`),KEY `index_phone` (`sf_phone`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8

现有数据如下

标注:表中数据较少,有时候虽然有索引,并且查询语句不会导致索引失效,但通过explain发现并没有走索引的情况,这是因为mysql预测到走全表扫描比索引快,而不使用索引,所以下面的例子是特意选一些会去走索引的查询语句。
推荐使用数据量大的表去分析索引使用情况

二、 key_len计算

执行explain查询语句:

EXPLAIN SELECT * FROM staff WHERE sf_age=18 AND sf_birthday='2021-07-12' AND sf_salary>3000;

以经验预判断一下,组合索引中三个字段索引都命中了,执行结果如下:

注意key_len=11,11表示用到的索引长度为11(单位byte),我们可以根据key_len来验证用到的索引字段:

key_len = 组合索引中,用到的每个索引字段所占字节之和

sf_age为tinyint占1一个字节,sf_birthday为DATA类型占3字节,sf_salary为int类型占4字节,另外三个字段都是default null,null标志位需要额外一个字节,所以总共是:

(1+1)+(3+1)+(4+1)=11

三、验证NULL占一个字节

为了证明null字段会比NOT NULL字段多占一个字节,(由于表建的不是很典型,随便找了个凑合用的)我们利用主键sf_id这个字段来试一下:

EXPLAIN SELECT sf_id FROM staff WHERE sf_id =10;


int字段的sf_id由于主键非空约束,该字段无需额外的一个字节来标志NULL,因此该字段为4字节,对应的key_len=4

四、varcahr与char的情况

字符串的情况就比较复杂,先看一下char(11)的字段

EXPLAIN SELECT * FROM staff WHERE sf_phone LIKE '223%';

在utf8编码下,中文字符占3字节、数字英文1字节,而key_len计算需要统一一下长度,因此不论中英文,都会按照一个字符3字节来计算,34=11字符x3 + 1(1是NULL 的标志位)

另外,如果字段是varchar并且可以为NULL的字段则需要额外两个或者三个字节(varchar要用1-2字节来存储字段长度,小于255的1字节,大于255的2字节),key_len计算时为了便于计算,统一采用2字节来存储字段长度,测试一下:

EXPLAIN SELECT * FROM staff WHERE sf_name  LIKE 'mar%';

sf_name字段varchar(10) 占10x3 + 2 + 1 =33字节,10个字符utf8下占30字节,加上两个字节存储长度,以及一个存储标记NULL的,所以索引index_name索引长度是33

五、utf8mb4

如果数据表用的是utf8mb4编码(兼容性更强,可以存储emoji表情及复杂繁体字),则字符占4字节,注意区分

根据Explain结果中的key_len判断MySQL联合索引中实际用到的索引字段相关推荐

  1. cpp导入excel到mysql_将EXCEL表格中的数据导入mysql数据库表中

    本文转载自http://blog.sina.com.cn/s/blog_5d972ae00100gjij.html 今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命 ...

  2. mysql 关闭in自动排序,mysql排序语句_mysql中的in排序 mysql按in中顺序来排序

    摘要 腾兴网为您分享:mysql中的in排序 mysql按in中顺序来排序,易订货,虚拟按键,享家,顺丰小哥等软件知识,以及方正证券小方,音基100,dwg转dwf,酷狗游戏盒,聊天宝客服聊天,kin ...

  3. mysql数据库导入到excel表格数据_[转载]将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  4. python中遍历字典判断是否存在_python中如何判断值在不在字典中

    python中判断值在不在字典中的方法:我们可以通过for循环来进行判断.在python中for循环可以遍历任何序列的项目.语法结构:[for iterating_var in sequence:st ...

  5. shell python比较_shell中的条件判断以及与python中的对比

    shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then          ...

  6. mysql in 有序_mysql中的in排序 mysql按in中顺序来排序

    假设,有如下的sql语句: 复制代码 代码示例: select * from table where id IN (3,6,9,1,2,5,8,7); 这样的情况取出来后,其实,id还是按1,2,3, ...

  7. 把EXCEL表格导入到MYSQL中_将EXCEL表格中的数据导入mysql数据库表中(两种方法)...

    今天项目上遇到需要将excel中的数据导入到数据库的classify表中,于是乎拼命上网查阅方法,发现以下两种方法比较可行: 在此之前先说说按照网上的说法我没有试验成功的方法,将excel文件xls保 ...

  8. mysql 视图删除单条记录_从视图中删除行会从MySQL的基表中删除行吗?

    是的,从视图中删除行从基表中删除行.让我们通过创建一个新表来了解这一点.创建表的查询如下mysql> create table deleteFromBaseTableDemo -> ( - ...

  9. c 读取mysql中表中数据_c#读取MySQL数据表中的内容

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

最新文章

  1. 安装截图软件shutter
  2. sift计算描述子代码详解_SIFT解析(三)生成特征描述子
  3. PyQt4编程之如何让状态栏显示信息
  4. mysql企业版多少钱_企业资质代办多少钱
  5. Just a Simple Problem
  6. [vue] ajax、fetch、axios这三都有什么区别?
  7. HTML5 Canvas 高仿逼真 3D 布料图案效果
  8. TCP三次握手与四次挥手的过程及原因
  9. 将java编译成so库_利用android studio 生成 JNI需要的动态库so文件
  10. Java三种连接池(druid、c3p0、dbcp)
  11. matlab机器人画圆
  12. 用户旅程图进阶:实操与模板
  13. win10如何设置保护色保护眼睛
  14. linux ftp 500误,Linux Vsftp报错500 OOPS如何修复
  15. 红米、小米 开发者选项
  16. imx6 linux 开发环境,从0搭建imx6ul开发环境
  17. 线上学习老师或者学习委员如何收集作业(进来的同志都体会到收作业的苦衷!尤其是学委!通过学习通方法)学委必须要会!
  18. 技术团队里什么样的人会被清除?抢老板的工作干合适吗?
  19. eclipse安装JST Server Adapters 和 JST Server Adapters Extentions报错
  20. SolarWinds安装、配置、使用手册

热门文章

  1. 收藏 | 700页NLP算法在百度、阿里、腾讯等一线大厂的最佳实践!PDF限时领!
  2. 复现经典:《统计学习方法》第19章 马尔可夫链蒙特卡罗法
  3. 内容流推荐中的个性化标题生成框架
  4. 入坑推荐系统,从Google这篇开始
  5. JavaScript学习(十)
  6. JSON格式提取相同属性的某个值,如何做?
  7. 以基因大数据推进“精准医疗”规划
  8. CentOS6.x下配置sendmail发邮件
  9. 如何加入IETF 如何发表自己的RFC
  10. python中利用matplotlib画图