-
keys:索引类型,表示MySQL此次查询中使用的索引,多个用逗号分开。
-
rows:遍历行数,表示MySQL此次查询遍历的行数大小,该值越小,查询速度会越快,是一个估计值,非绝对正确的。
准备工作
====
先来准备一张表和一点测试数据:
CREATE TABLE user
(
id
int(11) NOT NULL AUTO_INCREMENT,
age
int(4) DEFAULT NULL,
name
varchar(20) DEFAULT NULL,
sex
int(3) DEFAULT NULL,
nickname
varchar(30) DEFAULT NULL,
PRIMARY KEY (id
),
KEY testKey
(name
,age
,nickname
)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO user
VALUES (‘1’, ‘20’, ‘test1’, ‘1’, ‘ntest1’);
INSERT INTO user
VALUES (‘2’, ‘21’, ‘test2’, ‘0’, ‘ntest2’);
INSERT INTO user
VALUES (‘3’, ‘24’, ‘test1’, ‘1’, ‘ntest3’);
INSERT INTO user
VALUES (‘4’, ‘23’, ‘test4’, ‘0’, ‘ntest4’);
INSERT INTO user
VALUES (‘5’, ‘24’, ‘test5’, ‘1’, ‘ntest5’);
INSERT INTO user
VALUES (‘6’, ‘25’, ‘test6’, ‘0’, ‘ntest6’);
单表复合索引
======
通过上面表格,我们会发现,复合索引( name
, age
, nickname
)和它们三列的单个索引是有区别的(该案例不做复合索引和单列索引的性能分析)主要区别有以下几点:
-
复合索引中,只有最左边的一列单独使用才会触发索引,其他的列单个使用无法触发索引。
-
复合索引中,从最左边开始,相连的两个或多个会触发索引(相连和不相连的性能不同),如果没有最左边的列,后面的无论是否相连都不会触发索引。
-
通过分析我们可以发现,几个列的复合索引,就相当于 有几个索引,如复合索引(
name
,age
,nickname
)相当于name
索引、(name
,age
)索引以及(name
,age
,nickname
) 索引(注意,后面两个索引不能再按复合索引算,只是为了解释说明)。 -
where 条件后面的顺序不影响复合索引的触发如
age=21andname='test1'
一样会触发复合索引(MySQL会对查询条件顺序进行优化,我们无需担心顺序问题,但是为了更好理解,建议合理安排顺序)。
单表复合索引的性能分析
===========
上面表格中,第一行和第二行都走了索引,但是第一行是相连的两列,rows是1,这里我们可以说是使用了( name
, age
)索引(该索引并发真实存在,只是为了区分效果);第二行是不相连的两列rows是2,然后第四行是使用了复合索引的第一列 name 和非复合索引中的列作为查询条件,rows 同样是2,非相连的两列作为查询条件时,复合索引相当于使用了第一列作为查询条件。
为什么会这样呢?MySQL 在进行查询时,会根据索引筛选出复合索引的行,如果存在查询条件不在索引中的列,会进行二次筛选(即根据筛选出来的行进行二次查询),导致遍历的行数增加。
部分查询条件会导致全表扫描
特殊注意:
-
使用MySQL的CONCAT函数拼接条件一样会使用索引。
-
在使用 in 时,如果只有一个值,则等价于使用 =符号,会触发索引,包含两个或多个值,则索引失效。
-
在使用 not in 时,无论多少个值,索引都会失效。
-
使用 null 关键字查询时,无论值是否有为空的,都会触发索引。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
Spring全套教学资料
Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。
目录:
部分内容:
Spring源码
- 第一部分 Spring 概述
- 第二部分 核心思想
- 第三部分 手写实现 IoC 和 AOP(自定义Spring框架)
- 第四部分 Spring IOC 高级应用
基础特性
高级特性 - 第五部分 Spring IOC源码深度剖析
设计优雅
设计模式
注意:原则、方法和技巧 - 第六部分 Spring AOP 应用
声明事务控制 - 第七部分 Spring AOP源码深度剖析
必要的笔记、必要的图、通俗易懂的语言化解知识难点
脚手框架:SpringBoot技术
它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。
Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。
- SpringBoot入门
- 配置文件
- 日志
- Web开发
- Docker
- SpringBoot与数据访问
- 启动配置原理
- 自定义starter
微服务架构:Spring Cloud Alibaba
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
- 微服务架构介绍
- Spring Cloud Alibaba介绍
- 微服务环境搭建
- 服务治理
- 服务容错
- 服务网关
- 链路追踪
- ZipKin集成及数据持久化
- 消息驱动
- 短信服务
- Nacos Confifig—服务配置
- Seata—分布式事务
- Dubbo—rpc通信
Spring MVC
目录:
部分内容:
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
lt7O042l-1712654092672)]
部分内容:
[外链图片转存中…(img-mOkHEZVK-1712654092672)]
[外链图片转存中…(img-YIaKyhty-1712654092672)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!