一、创建链接
二、验证权限,修改了权限,建立新的链接才会生效。
三、SQL执行的临时内存缓存
一、先查询缓存,更新操做会致使全部缓存失效。
二、MySQL 8.0功能去掉ide
词法解析,语法解析优化
一、决定使用哪一个索引,比方说根据统计信息预估扫描行数,是否使用临时表,需不须要排序等。
二、决定join的各个表的链接顺序3d
一、调用引擎接口,查找到第一条符合条件的数据,而后依次查询,返回结果。版本控制
一、日志先行,redo log 和 undo log
二、binlog
三、两阶段提交日志
一、4种隔离级别
二、可重复读的实现原理,一致性视图
三、例子code
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);
注意:不带索引的更新,会升级为表锁!orm
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不带索引。blog
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;
四、读提交和RR的区别
一、B+树
二、主键索引和普通索引的区别
一、全字段排序(sort_buffer,参数:sort_buffer_size)
二、rowid排序(参数:max_length_for_sort_data)
三、例子:
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条上海的数据。
一、Using filesort表示会使用排序。
二、经过如下语句查看是否使用了文件排序,文件排序通常是归并排序。
SELECT * FROM information_schema.OPTIMIZER_TRACE;
number_of_tmp_files,表明了使用了几个临时文件。
三、转rowid排序
set max_length_for_sort_data = 16;
使用rowid了排序,这个时候没有使用文件排序,使用临时文件个数为0;
四、增长覆盖索引,就不会再排序了,由于索引默认是有顺序的。