当前位置: 首页 > news >正文

【学习总结】MySQL篇

MySql

事务ACID

原子性

事务是不可分割的最小单元,一个事务的若干sql操作。要么统一成功,要么统一失败。(redoLog)

持久性

数据库的数据在宕机,丢失数据的情况下。可以回滚数据,这由mysql的日志完成(redoLog)

隔离性

两个事务的操作,应该互不干扰。一个事务,不会对另一个事务照成干扰。(锁)

一致性

一个事务执行前后并不会破坏数据库的一致性。比如一张表的name字段是唯一的,事务执行后,并不对name字段的唯一性造成破坏。(undoLog)

RedoLog和BinLog的区别

使用情景

binlog 主从复制,容灾备份
redolog 维持事务的一致性ACID

记录形式

binlog 有三种格式的日志保存log
redolog 纯物理记录日志

记录时机

binlog 每条sql都会记录
redolog 只有事务执行完毕才会保存日志

MYSQL锁的算法

行锁

Record Lock

单个行上锁

GapLock

间隙锁,锁定一个范围。但不包括记录本身。

Next-Key Lock

范围锁 相当于 Record Lock + GapLock(包含记录本身)

MySQL锁的问题

脏读

事务A读了两次,事务B的还没提交,结果事务A读的两次不一致。

不可重复读

事务A两次读取的途中,事务B修改了一行数据。

幻读

事务A两次读取的途中,事务B新增了一行数据。

MVCC

MVCC多版本并发控制,是为了解决事务操作中并发安全性问题而诞生的一种技术。

MVCC 主要解决了三个问题

1、采用乐观锁的机制,降低死锁概率。

2、解决一致性读的问题。事务开始到结束都读的同一份数据。

3、解决读写并发阻塞问题。提升数据并发处理能力。

事务的隔离级别

读已提交

TODO 原理(加的什么锁)

读未提交

TODO 原理(加的什么锁)

可重复读

TODO 原理(加的什么锁)

串行化

TODO 原理(加的什么锁)

效果

MySQL的优化

架构设计层面的优化

主从复制
读写分离
分库分表
引入缓存

SQL优化

通过慢查询日志定位SQL语句
通过explain语句分析SQL语句
改SQL

例子:https://www.bilibili.com/video/BV1fM4m127tb/?spm_id_from=333.1007.top_right_bar_window_history.content.click

思想:面对大批量数据排序。只排序id再查全部数据,比全部数据一股脑排序性能更好。

因为:mysql分为服务层和存储引擎层。如果把所有数据放在mysql服务层会导致mysql压力过大。把单独的id放在服务层排序。压力会小很多。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 我的API定义规范(未完待续,欢迎指正)
  • 关于缓存的一些心得
  • unity对象缓存技术ObjectPool
  • 【算法】KMP算法
  • 硬盘分区读不出来:原因深度剖析与高效恢复实践
  • 通用分页处理:从繁琐到简洁的转变
  • PYTHON专题-(7)python都有包了?
  • 【王道数据结构-第二章-线性表算法题】
  • 50etf期权行权采用什么交割方式 ?
  • Python爬虫与MySQL完美结合:从环境搭建到实战优化
  • Linux——文件(1)
  • SQL注入实例(sqli-labs/less-9)
  • Ubuntu22.04安装Docker教程
  • 微信开放平台更换服务器证书通知
  • Tomcat 漏洞
  • php的引用
  • 2017前端实习生面试总结
  • Android开源项目规范总结
  • Asm.js的简单介绍
  • DOM的那些事
  • git 常用命令
  • JavaScript设计模式与开发实践系列之策略模式
  • Mysql数据库的条件查询语句
  • python docx文档转html页面
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Travix是如何部署应用程序到Kubernetes上的
  • 闭包--闭包作用之保存(一)
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 欢迎参加第二届中国游戏开发者大会
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 如何进阶一名有竞争力的程序员?
  • 突破自己的技术思维
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​用户画像从0到100的构建思路
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #{}和${}的区别是什么 -- java面试
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #Ubuntu(修改root信息)
  • #VERDI# 关于如何查看FSM状态机的方法
  • #图像处理
  • (笔试题)分解质因式
  • (二)windows配置JDK环境
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 未来三学期想要修的课 (日記)
  • (转)LINQ之路
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .NET CLR基本术语
  • .NET Core 版本不支持的问题
  • .net framework4与其client profile版本的区别
  • .Net IE10 _doPostBack 未定义
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉