MySQL小组分享大纲

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL小组分享大纲相关的知识,希望对你有一定的参考价值。

1、查询语句是如何执行的?

技术图片

1、连接

1、建立连接
2、验证权限,修改了权限,创建新的连接才会生效。
3、SQL执行的临时内存

2、查询缓存

1、先查询缓存,更新操作会导致所有缓存失效。
2、mysql 8.0功能去掉

3、分析

词法解析,语法解析

4、优化

1、决定使用哪个索引,比方说根据统计信息预估扫描行数,是否使用临时表,需不需要排序等。
2、决定join的各个表的连接顺序

5、执行

1、调用引擎接口,查找到第一条符合条件的数据,然后依次查询,返回结果。

更新是如何执行的?

1、日志先行,redo log 和 undo log
2、binlog
3、两阶段提交

技术图片

事务隔离&多版本控制

1、4种隔离级别
2、可重复读的实现原理,一致性视图
技术图片
3、例子

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `k` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into t(id,k) values (1,1),(2,2);

技术图片

注意:不带索引的更新,会升级为表锁!

CREATE TABLE `t1` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `city` varchar(16) NOT NULL,
  `name` varchar(16) NOT NULL,
  `age` int(11) NOT NULL,
  `ext` varchar(10) NOT NULL DEFAULT ‘‘,
  PRIMARY KEY (`id`),
  KEY `city` (`city`,`name`,`age`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9001 DEFAULT CHARSET=utf8 

事务1,更新了一条数据,where不带索引。

START TRANSACTION with CONSISTENT SNAPSHOT;
update t1 set name = ‘test2‘ where ext = ‘test‘;

事务2,普通查询可以,for update查询被阻塞。

select * from t1 where id=4002;
select city,name,age from t1 where id=4002 for update;

4、读提交和RR的区别

索引结构

1、B+树
2、主键索引和普通索引的区别

排序原理

1、全字段排序(sort_buffer,参数:sort_buffer_size)
2、rowid排序(参数:max_length_for_sort_data)
3、例子:

CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `city` varchar(16) NOT NULL,
  `name` varchar(16) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `city` (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

select city,name,age from t1 where city=‘北京‘ order by name limit 1000;

表中有4000条北京的数据,1000条上海的数据。

技术图片

1、Using filesort表示会使用排序。

2、通过以下语句查看是否使用了文件排序,文件排序一般是归并排序。

SELECT * FROM information_schema.OPTIMIZER_TRACE;

技术图片

number_of_tmp_files,代表了使用了几个临时文件。

3、转rowid排序

set max_length_for_sort_data = 16;

技术图片

使用rowid了排序,这个时候没有使用文件排序,使用临时文件个数为0;

4、增加覆盖索引,就不会再排序了,因为索引默认是有顺序的。
技术图片

以上是关于MySQL小组分享大纲的主要内容,如果未能解决你的问题,请参考以下文章

京东宅急送的微服务实践分享(下)| 架构师小组交流会

小组分享会--日常使用命令以及运维和java相关内容

Jenkins基础普及,视频分享大纲 。

适合零基础小白学习的ui设计方法及课程大纲分享

适合零基础小白学习的ui设计方法及课程大纲分享

数据结构与算法复习大纲----学霸经验分享系列