写点什么

MySQL 实战 45 讲笔记(1)

用户头像
王传义
关注
发布于: 2020 年 06 月 28 日



说明:来源专栏MySQL实战45讲笔记。



01 基础架构:一条SQL查询语句是如何执行的?

MySQL 可以分为 Server 层和存储引擎层两部分



意思是说:

msyql数据存储的文件里。普通程序 一般直接存储内存就可以了。

我这样理解可以吗?一看就不懂,继续往下看。



02 日志系统:一条SQL更新语句是如何执行的?



一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功

能模块,最后到达存储引擎。

那么,一条更新语句的执行流程又是怎样的呢?



redo log 用于保证 crash-safe 能力







binlog 日志只能用于归档



  • 这是什么意思

  • 将 redo log 的写入拆成了两个步骤:prepare 和 commit,这就是"两阶段提交"。





Point A

如果服务器异常关闭发生在Point A以及之前的时间点,这个时候redolog 和 binlog都没有任何记录,事务还未提交,不会造成任何影响。

Point B

当服务器启动的时候发现redo log里处于prepare状态的记录,这个时候需要检查binlog是否完整包含此条redo log的更新内容(通过全局事务ID对应),发现binlog中还未包含此事务变更,则丢弃此次变更。

Point C

和Point B基本相同,只不过此时发现binlog中包含redo log的更新内容,此时事务会进行提交。

Point D

binlog中和数据库中均含有此事务的变更,没有任何影响。

mysql> select @@datadir;
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

mysql> show variables like 'innodb_log_file%';
+---------------------------+----------+
| Variable_name | Value |
+---------------------------+----------+
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
+---------------------------+----------+
2 rows in set (0.04 sec)

03 | 事务隔离:为什么你改了我还看不见?

04 | 深入浅出索引(上)

  • 索引类型分为主键索引和非主键索引

  • 在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。

k





扩展阅读:

  • B+ 树这种索引结构,可以利用索引的“最左前缀”









09 普通索引和唯一索引,应该怎么选择?





  • 选择辅助索引条件: 有辅助索引,第一个字段明确了





  • 神奇







  • 普通索引 vs 唯一索引



  • 查询没区别



10 MySQL为什么有时候会选错索引?











用户头像

王传义

关注

希望每一位来访的朋友都能有所收获! 2017.11.30 加入

如果有疑问 wang_cyi@163.com 联系

评论 (2 条评论)

发布
用户头像
为什么说辅助索引 能比聚集索引减少io操作,不是聚集索引叶子节点 存储全部信息吗?
2020 年 06 月 28 日 14:02
回复
没有更多了
MySQL实战45讲笔记(1)