在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
什么是MVCCMVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的 并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读 操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样 在做查询的时候就不用等待另一个事务释放锁。
MVCC没有正式的标准,在不同的DBMS中MVCC的实现方式可能是不同的,也不是普遍使用的(大家可以参考相关的DBMS文档)。这里讲解InnoDB中MVCC的实现机制(MySQL其他的存储引擎并不支持它)。
快照读与当前读MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理 读-写冲突 ,做到 即使有读写冲突时,也能做到 不加锁 , ...
学习笔记
未读
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
事务的隔离性由这章讲述的锁来实现。
概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是针对一些敏感的数据(比如订单、金额等),我们就需要保证这个数据在任何时刻最多只有一个线程在访问,保证数据的完整性和一致性。在开发过程中加锁是为了保证数据的一致性,这个思想在数据库领域中同样很重要。
在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。为保证数据的一致性,需要对 并发操作进行控制 ,因此产生了 锁 。同时 锁机制 也为实现MySQL的各个隔离级别提供了保证。 锁冲突 也是影响数据库 并发访问性能 的一个重要因素。所以锁对数据库而言显得尤其重要,也更加复杂。
MySQL并发事务访问相同记录并发事务访问相同记录 ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?
事务的隔离性由 锁机制 实现。
而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。
REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。
UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。
有的DBA或许会认为 UNDO 是 REDO 的逆过程,其实不然。REDO 和 UNDO都可以视为是一种 恢复操作,但是:
redo log: 是存储引擎层 (innodb) 生成的日志,记录的是"物理级别"上的页修改操作,比如页号xxx,偏移量yyy写入了’zzz’数据。主要为了保证数据的可靠性。
undo log: 是存储 ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务的机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。
存储引擎支持情况SHOW ENGINES 命令来查看当前 MySQL 支持的存储引擎都有哪些,以及这些存储引擎是否支持事务。
基本概念事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。(一组不可分隔的操作)
事务处理的原则:保证所有事务都作为 一个工作单元 来执行,即使出现了故障,都不能改变这种执行方 式。当在一个事务中执行多个操作时,要么所有的事务都被提交( commit ),那么这些修改就 永久 地保 存下来;要么数据库管理系统将 放弃 所作的所有 修改 ,整个事务回滚( rollback )到最初状态。
1234# 案例:AA用户给BB用户转账100u ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
都有哪些维度可以进行数据库调优?简言之:
索引失效、没有充分利用到索引——建立索引
关联查询太多JOIN(设计缺陷或不得已的需求)——SQL优化
服务器调优及各个参数设置(缓冲、线程数等)——调整my.cnf
数据过多——分库分表
关于数据库调优的知识非常分散。不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同。这里我们分为三个章节进行细致讲解。
虽然SQL查询优化的技术有很多,但是大方向上完全可以分成物理查询优化和逻辑查询优化两大块。
物理查询优化是通过索引和表连接方式等技术来进行优化,这里重点需要掌握索引的使用。
逻辑查询优化就是通过SQL等价变换提升查询效率,直白一点就是说,换一种查询写法效率可能更高。
数据准备学员表 插 50万 条, 班级表 插 1万 条。
12CREATE DATABASE atguigudb2 ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
在数据库调优中,我们的目标是 响应时间更快, 吞吐量更大 。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。
数据库服务器的优化步骤当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。
整个流程划分成了 观察(Show status) 和 行动(Action) 两个部分。字母 S 的部分代表观察(会使 用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。
我们可以通过观察了解数据库整体的运行状态,通过性能分析工具可以让我们了解执行慢的SQL都有哪些,查看具体的SQL执行计划,甚至是SQL执行中的每一步的成本代价,这样才能定位问题所在,找到了问题,再采取相应的行动。
详细解释一下这张图:
首先在S1部分,我们需要观察服务器的状态是否存在周期性的波动。如果存在周期性波动,有可能是 ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
索引的声明与使用索引的分类MySQL的索引包括普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引等。
从功能逻辑上说,索引主要有4种,分别是普通索引、唯一索引、主键索引、全文索引。
按照物理实现方式,索引可以分为2种:聚簇索引和非聚簇索引。
按照作用字段个数进行划分,分成单列索引和联合索引。
普通索引在创建普通索引时,不附加任何限制条件,只是用于提高查询效率。这类索引可以创建在任何数据类型中,其值是否唯一和非空,要由字段本身的完整性约束条件决定。建立索以后,可以通过索引进行查询。例如,在表student的字段name上建立一个普通索引,查询记录时就可以根据该索进行查询。
唯一性索引使用UNIQUE参数可以设置索引为唯一性索引,在创建唯一性索引时,限制该索引的值必须是唯一的,但允许有空值。在一张数据表里可以有多个唯一索引。
例如,在表stu ...
984bd7d0fda1d4283309ed094b1d09bdb4aaa07101ec48a82e924744057e65ca9e9543db7d34981607828939c1f220a2a273cb65ed907c7b43d217f1d164cc099c65bd6d8d8d87bff162189489a7155866f9f939fbeaf2271e3dc090e69fd42482e2a625b21571761ac7e14a82604d15608d03ae4176dc730d56cc5de15529b57ff86b2115890c3cceef7fd94157fb2787df2fc39b0ec6625feae1e481b10c20c8e786c6f256f9fa0bb7989e0c116a98ffde20a3be20c17bb44dd4dc23c0cfa231d377afe5490b40bccfa0daea67b611859d7fa5440afeb791009258e9379aff4780ab4d398b1221ec5494f1b4842887d3e3cba7e495b0b00 ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
数据库的存储结构:页索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如Memory都不用磁盘来存储数据。
由于InnoDB是MySQL的默认存储引擎,所以本章剖析InnoDB存储引擎的数据存储结构。
磁盘与内存交互基本单位:页InnoDB将数据划分为若干个页,InnoDB中页的大小默认为16KB。
以页作为磁盘和内存之间交互的基本单位,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页( ...
在线视频:MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板官方资料: 尚硅谷MySQL入门到高级-宋红康版
代码仓库Gitee:https://gitee.com/an_shiguang/learn-mysql
为什么使用索引索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全表扫描,即需要一条一条地查找记录,直到找到与条件符合的记录。
如上图所示,数据库没有索引的情况下,数据分布在硬盘不同的位置上面,读取数据时,摆臂需要前后摆动查询数据,这样操作非常消耗时间。如果数据顺序摆放,那么也需要从1到6行按顺序读取,这样就相当于进行了6次IO操作,依旧非常耗时。如果我们不借助任何索引结构帮助我们快速定位数据的话,我们查找 Col 2 = 89 这条记录,就要逐行去查找、去比较。从Col 2 = 34 开始,进行比较,发现不是,继续下一行。我 ...