码迷,mamicode.com
首页 > 数据库 > 详细

MySQL小组分享大纲

时间:2019-08-19 14:37:04      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:控制   order by   权限   分析   建立连接   test   ble   ODB   size   

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小组分享大纲

标签:控制   order by   权限   分析   建立连接   test   ble   ODB   size   

原文地址:https://blog.51cto.com/janephp/2430655

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!