
数据库
纸巾 ya
本人博客为自己的笔记,仅供参考,如有错误欢迎各位大佬帮忙纠正
展开
-
数据库的事务
A:原子性有undo log日志保证,它记录了需要回滚的日志信息,事物回滚时撤销已经执行成功的sqlC:一致性由其他三大特性保证、程序代码要保证业务上的一致性I:隔离性有MVVC来保证D:持久性由内存+redo log 来保证,MySQL修改数据同时在内存和redo log记录这次操作,宕机的时候可以从redo log恢复InnoDB redo log 写盘,InnoDB事物进入prepare状态,如果前面prepare成功,binlog写盘,再据需将事务日志持久化到binlog,如果持久化成功,原创 2022-05-05 10:36:34 · 1123 阅读 · 0 评论 -
数据库和缓存数据的一致性问题
1、先更新MySQL,再更新redis,如果更新redis失败,可能仍然不一致2、先删除redis缓存数据,再更新MySQL,再次查询的时候讲数据添加到缓存仲,这种方案解决1方案的问题,但是在高并发下性能比较低,而且仍然会出现数据不一致的问题,比如线程1删除了redis的数据,正在更新MySQL,此时另外一个查询再查询,那么会吧MySQL仲老数据又查到redis中。3、延时双删,步骤是:先删除redis缓存数据,再更新MySQL,延时几百毫秒再删除redis缓存数据,这样就算在更新MySQL时,其他线程原创 2022-05-05 10:26:19 · 1401 阅读 · 0 评论 -
MySQL锁
按照锁的粒度分类1、行锁:锁某行数据,锁粒度最小,并发度高2、表锁:锁整张表,所粒度最大,并发最低3、间隙锁:锁的是一个区间还可以分为:1、共享锁(读锁):一个事务给某行数据加了读锁,其他事务也可以读,但不能写2、排他锁(写锁):一个事务够某行数据加了写锁,其他事务不能再加读锁,且不能写还可以分为:1、乐观锁:并不会真正的去锁某行记录,而是通过一个版本号来实现2、悲观锁:上面的行锁,表锁都是悲观锁在事务隔离级别实现中,就需要利用锁来解决欢度(Innodb解决了幻读的问题)...原创 2022-05-05 10:18:40 · 515 阅读 · 0 评论 -
关于MySQL索引的一些总结
基本原理1、把创建了索引的列的内容进行排序2、对排序结果生成倒排表3、在倒排表内容上拼上数据地址4、在查询的时候,先拿到倒排表的内容,在取出数据地址链,从而拿到具体数据;B+树在MySQL中,一个page(页)就等于16KB在查询的时候,每个查询的最小单位是一个pageB+树就是在B树基础上,叶子节点之间多了个指针,结构如下图:索引类型:1.普通索引index :加速查找2.唯一索引主键索引:primary key :加速查找+约束(不为空且唯一)唯一索引:unique:加速查找+原创 2022-05-04 13:14:05 · 196 阅读 · 0 评论 -
MySQL索引及性能优化
性能下降的表现1.执行时间长2.等待时间长性能下降的原因查询语句写的不好,各种连接,各种子查询导致用不上所以或者没有建立索引建立的索引失效,建立了索引,在真正执行时,没有用上建立的索引管理查询太多join服务器调优及配置参数导致,如果设置的不合理,比例不恰当,也会导致性能下降,sql面man系统架构问题通用的优化方案设计优化:表的设计合理化(符合三大范式,有时候要进行反三大范式)索引优化:添加适当的索引sql优化:写出高质量的sql,避免索引失效架构优化:分表技术,主从复制,原创 2022-05-04 11:37:10 · 122 阅读 · 0 评论