架构师课程
文章平均质量分 94
名猿陈大浏
这个作者很懒,什么都没留下…
展开
-
mysql - 第11课 - MVCC多版本并发控制机制原理 看了就懂
导图(用于总结和复习)MVCC (Multi-Version Concurrency Control)(多版本并发控制机制)Mysql在可重复度事务隔离级别下,同样的sql在同一事务下多次执行查询结果相同,就算有其他事务修改数据,也不会影响当前事务的查询结果。这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的。Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。但是实现原理不大一样,在读已提交级别是每次select生成一个..原创 2020-08-09 00:54:30 · 848 阅读 · 0 评论 -
mysql - 第10课 - 深入理解mysql事务隔离级别与锁机制 (mysql各种锁,mysql事务隔离级别实现原理)
官网文档:https://dev.mysql.com/doc/refman/5.7/en/导图(用于总结和复习)一. 事务与事务的四大特性(ACID)事务定义:事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合。ACID:原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。 一致性(Consistent) :在事务开始和原创 2020-08-05 17:36:55 · 1827 阅读 · 2 评论 -
mysql - 第9课 - count()查询优化 原来count(*)是最快的,请大胆使用
注:当前测试mysql版本:mysql5.7,编码utf8mb4,ENGINE:InnoDB准备表和数据的脚本:-- 创建A表DROP TABLE IF EXISTS `A`;CREATE TABLE A ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_a` (`a`)) ENGI原创 2020-08-03 14:35:25 · 853 阅读 · 0 评论 -
mysql - 第8课 - in和exsits优化 exists不一定比in快
注:当前测试mysql版本:mysql5.7,编码utf8mb4,ENGINE:InnoDB准备表和数据的脚本:-- 创建A表DROP TABLE IF EXISTS `A`;CREATE TABLE A ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_a` (`a`)) ENGI原创 2020-08-03 14:30:00 · 298 阅读 · 0 评论 -
mysql - 第7课 - join关联查询优化详解
注:当前测试mysql版本:mysql5.7,编码utf8mb4准备表和数据的脚本:-- 学生表DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `std_name` varchar(30) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `class_id` int(11原创 2020-08-03 14:20:16 · 456 阅读 · 3 评论 -
mysql - 第6课 - 分页查询优化
注:当前测试mysql版本:mysql5.7,编码utf8mb4表结构和添加100万条测试数据的脚本:DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `std_name` varchar(30) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `class_id` int(原创 2020-08-03 14:17:01 · 254 阅读 · 0 评论 -
mysql - 第5课 - Order by与Group by优化
注:当前测试mysql版本:mysql5.7,编码utf8mb4测试数据脚本:DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `std_name` varchar(30) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `class_id` int(11) unsigned原创 2020-08-03 14:02:38 · 265 阅读 · 0 评论 -
mysql - 第4课 - trace工具用法详解
注:当前测试mysql版本:mysql5.7,编码utf8mb4trace是MySQL5.6版本后提供的SQL跟踪工具,通过使用trace可以让我们明白optimizer(优化器)如何选择执行计划。注意:开启trace工具会影响mysql性能,所以只适合临时分析sql使用,用完之后请立即关闭。测试数据脚本:DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `id` int(10) unsigned NOT N.原创 2020-07-31 16:48:56 · 1819 阅读 · 0 评论 -
mysql - 第3课 - 如何优化索引
注:当前测试mysql版本:mysql5.7,编码utf8mb4注意:是否走索引是跟数据量有关的。测试数据脚本:DROP TABLE IF EXISTS `t_student`;CREATE TABLE `t_student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `std_name` varchar(30) NOT NULL, `age` tinyint(3) unsigned NOT NULL, `class_i原创 2020-07-31 16:43:57 · 237 阅读 · 0 评论 -
mysql - 第2课 - explain执行计划详解
参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html注:当前测试mysql版本:mysql5.7,编码utf8mb4表信息:CREATE TABLE `t_student` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `std_name` varchar(30) NOT NULL, `age` tinyint(3) unsigned NOT NULL原创 2020-07-31 16:40:13 · 236 阅读 · 0 评论 -
mysql - 第1课 - 索引
一. 索引定义索引是排好序的数据结构。二. 索引的数据结构mysql索引可选两种数据结构:B+树和hash。默认B+树。索引为啥不用二叉树、红黑树?二叉树和红黑树的节点只能存一个值,数据量大的时候树太高,检索的时候每个节点都需要进行一次io,io浪费性能。B+树每个节点能存储16k(默认是16K,可以使用innodb_page_size参数修改),大概能存储1000多个值,能降低树高度,减少io次数。指针大小大概占用6ByteB+树B-树的区别B-树:B+树:原创 2020-07-31 16:38:31 · 290 阅读 · 0 评论