- 博客(9)
- 收藏
- 关注
原创 MySQL45讲笔记——全局锁与表级锁
全局锁 使用Flush tables with read lock(FTWRL)对库加全局读锁,加锁之后整库处于只读状态。使用场景是 全库逻辑备份。 在可重复读隔离级别下,Mysqldump使用-single-transaction参数,在导数据之前会启动一个事务确保一致性视图,但前提在于引擎需要支持隔离级别。 为何不用 set global readonly = true ? 一个是有些系统中readonly被用作逻辑操作,影响面较大,例如判断库是否主库 另一个执行命令后发生异常,Mysql会自动断开FT
2021-02-08 23:17:02
164
原创 MySQL45讲笔记——索引(覆盖索引,最左前缀原则,索引下推)
索引(下) 覆盖索引 通过联合索引将所有字段囊括,查询时就不需要进行回表操作,称为覆盖索引。 最左前缀原则 字段满足联合索引最左N个字段,就可以利用索引进行查询。 一般来说当存在索引(a,b)后,不需要再单独为a建立索引。但需要查询条件只有b的语句无法使用(a,b)这个联合索引,所以说要同时维护(a,b)和(b)这两个索引。考虑空间问题,建议a是较大的字段。 MySQL 8.0.19: 一个主键以及一个联合索引(name,age)。 当以name进行查询时: 当以age进行查询时: Extra=usi
2021-01-20 18:08:26
208
原创 数据结构与算法学习笔记(一)复杂度
复杂度 时间复杂度 常见时间复杂度为: 常量阶O(1),对数阶O(logN),线性阶O(n),线性对数阶O(nlogN),平方阶O(n2) 非常用算法时间复杂度,非多项式量级: 指数阶O(2n),阶乘阶O(n!) O(logN),O(nlogN),例: i=1; while (i <= n) { i = i * 2; } 复杂度为O(log2N),记为O(logN)。 O(m+n),O(m*n),例: int cal(int m, int n) { int sum_1 = 0; int i
2021-01-20 11:17:15
204
原创 MySQL45讲笔记——索引(索引模型)
索引 索引常见模型: 哈希表:以k-v形式存储在数组中,通过哈希函数计算key值得出数组位置,如果发生哈希冲突则在该数组位置追加链表。区间查询很慢,适用于等值查询。 有序数组:有序存储,等值查询是使用二分法时间复杂度是O(log(N)),是查询效率最好的数据结构,更新数据需要移位成本太高,适用于静态存储,保存不会修改的数据。 ...
2021-01-19 22:38:34
195
原创 MySQL45讲笔记——事务
事务 事务的隔离级别以及产生的问题 隔离级别 读未提交:指一个事务未提交时,他的变更能够被其他事务所读取到。 读已提交:指一个事务提交之后,别的事务才能看到他的变更。 可重复读:指一个事务执行过程中,数据总是和事务启动时的一致。 序列化:对同一行记录,读会加读锁,写会加写锁,后面的事务必须要等前面的事务执行完成才能执行。 mysql> create table T(c int) engine=InnoDB; insert into T(c) values(1); 读未提交:V1=2,V2=2,V3
2021-01-18 22:22:45
198
原创 MySQL45讲笔记——日志
MySQL日志系统 MySQL备份数据由binlog和redolog实现。binlog属于Server层,redolog属于InnoDB独有。 redolog redolog是innoDB特有的,记录某个数据页上的修改动作,环形固定空间,有两个指针,write pos指向当前写位置,check point为刷新位置。write-check为空闲空间,check-write为需要刷盘的记录。 binlog binlog属于Server层,记录这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1
2021-01-18 17:12:28
376
原创 MySQL45讲笔记——架构
MySQL基础架构 MySQL分为Server层和存储引擎层。 Server层包括连接器、查询缓存、分析器、优化器、执行器等。 存储引擎层负责数据的存储和提取,支持多种存储引擎。 Server: 连接器:负责与客户端建立连接,获取权限。 权限:登录成功的同时会获得权限,意味着如果用户登录之后对该用户修改权限,新建连接才会使用新权限,对当前正在使用的用户连接无效。 连接:连接默认断开时间为8小时,由于建立连接比较复杂,建议减少建立连接的动作,尽量使用长连接。 长连接的缺点:MySQL再执行过程中临时内存是管理
2021-01-15 16:52:42
116
原创 MySQL45讲学习笔记(三九)
自增主键的连续 自增值(AUTO_INCREMENT):再向表插入数据的时候会生成该值,表示下一次需要自增值的插入数据操作所填充的自增值。 例: table t { `id` int(11) AUTO_INCREMENT,`b` int(11) }; insert into t values(null,1) 此时自增值为2; 自增值的保存策略 myISAM: 保存于数据文件中。 InnoDB: mysql5.7及以前会保存于内存中,每次重启打开会去找自增列的最大值,然后将这个值+1作为当前自增值。 重启会
2021-01-12 11:24:32
218
原创 HashMap线程安全问题个人理解
HashMap的实现: HashMap实现使用了一个数组,每个数组项有一个链表(JDK8之后链表长度大于8的将会把链表转换为红黑树),数组index是有key的hashCode以及数组Capacity综合计算得出,由于不同的key能计算出相同的index,这就产生了hash冲突。 ...
2021-01-04 15:57:47
311
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人