mysql可以分享的技术_技术分享【MySQL】

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

abf40cc286ff042bfefee06df8b6f306.png

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、两阶段提交

102b1f9e564a26ce7ead86c492b7e098.png

事务隔离&多版本控制

1、4种隔离级别

2、可重复读的实现原理,一致性视图

081bc9f78831853b34643aeb23e5dc89.png

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);

6841e03b5dce8703846004b9f44c3664.png

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

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条上海的数据。

6ef59cbad0c4b167f69f4b54fc161556.png

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

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

SELECT * FROM information_schema.OPTIMIZER_TRACE;

dd380cc11626749b000aeb29551b178b.png

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

3、转rowid排序

set max_length_for_sort_data = 16;

b0aa29ba518c42caab65be5a9118d10a.png

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

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

543eebd17b6b3ac8ed246355028d9b11.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值