![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 73
MySQL
Cafebaby_
这个作者很懒,什么都没留下…
展开
-
10. 锁
如果我们的⼀些业务场景不允许读取记录的旧版本,⽽是每次都必须去读取记录的最新版本,⽐⽅在银⾏存款的事务中,你需要先把账户的余额读出 来,然后将其加上本次存款的数额,最后再写到数据库中。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gs5qEi13-1686706568853)(C:\Users\10059\AppData\Roaming\Typora\typora-user-images\image-20220905164139982.png)](2)写-写事务并发:加锁。原创 2023-06-14 09:36:21 · 44 阅读 · 0 评论 -
9. 事务
(1)事务是一系列动作单元的组合,这些动作要么一起执行成功,要么一起执行失败。事务具有一个重要的ACID属性,分别是原子性(Atomic):事务是原子性操作,事务中的动作要么都成功,要么都失败一致性(Consistence):一旦事务中的所有动作成功完成,事务就需要提交隔离性(Isolation):多个事务有可能会同时处理相同的数据,因此每个事务都需要隔离起来(隔离等级)持久性(Durability):事务一旦完成,无论系统发生什么错误,结果都不会受到影响。原创 2023-06-14 09:37:36 · 42 阅读 · 0 评论 -
8.Explain关键字
⼀条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后⽣成⼀个所谓的执⾏计划,这个执⾏计划展示了接下来具体执⾏查询的⽅式,⽐如多 表连接的顺序是什么,对于每个表采⽤什么访问⽅法来具体执⾏查询等等。设计MySQL的⼤叔贴⼼的为我们提供了EXPLAIN语句来帮助我们,它的作用就是查看某个查询语句的具体执行计划。原创 2023-06-13 14:45:51 · 38 阅读 · 0 评论 -
7.基于成本的优化
我们之前⽼说MySQL执⾏⼀个查询可以有不同的执⾏⽅案,它会选择其中成本最低,或者说代价最低的那种⽅案去真正的执⾏查询。I/O成本:执行sql需要扫描的页数的数量 * 1.0CPU成本:执行sql需要读取以及检测的记录数量 * 0.2。原创 2023-06-13 14:43:14 · 34 阅读 · 0 评论 -
6.多表连接原理
⼀般情况下,我们都把只涉及单表的过滤条件放到WHERE⼦句中,把涉及两表的过滤条件都放到ON⼦句中,我们也⼀般把放到ON⼦句中的过滤条件也称之为连 接条件。通过启动参数或者系统变量join_buffer_size进行配置,默认大小为262144字节(也就是256KB),最小可以设置为128字节。算法思想:主表只要访问一次,而从表会被访问多次。具体访问几遍取决于对主表执行单表查询后的结果集中的记录条数。join buffer:存放多条主表查询数据。144字节(也就是256KB),最小可以设置为128字节。原创 2023-06-13 14:42:18 · 102 阅读 · 0 评论 -
5.单表访问方法
我们在第一章的时候就说过,一条sql的执行需要经过连接管理,解析与优化,存储引擎。那么在第二步中,将解析后的文本进行查询优化后,会生成一个执行计划。这个执⾏计划表明了应该使⽤哪些索引进⾏查询,表之间的连接顺序是 啥样的,最后会按照执⾏计划中的步骤调⽤存储引擎提供的⽅法来真正的执⾏查询,并将查询结果返回给⽤户。下面就来剖析查询优化。原创 2023-06-13 14:41:46 · 19 阅读 · 0 评论 -
4.B+树索引
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EBCP7ulU-1686638463676)(C:\Users\10059\AppData\Roaming\Typora\typora-user-images\image-20220824152808674.png)]用户记录在叶子节点,索引记录在非叶子节点如图所示,从根节点出发,有非叶子节点的数据页在user_records存放的是索引记录,和用户记录一样是以链表形式按照主键从小到大存放,索引记录只有两列分别是主键值和页码。原创 2023-06-13 14:42:58 · 25 阅读 · 0 评论 -
3.InnoDB数据页结构
⻚是MySQL中磁盘和(存储引擎)内存交互的基本单位,也是存储引擎管理存储空间的基本单位。InnoDB是⼀个将表中的数据存储到磁盘上的存储引擎,所以即使关机后重启我们的数据还是存在的。⽽真正处理数据的过程是发⽣在内存中的,所以需要把磁盘 中的数据加载到内存中,如果是处理写⼊或修改请求的话,还需要把内存中的内容刷新到磁盘上。⽽我们知道读写磁盘的速度⾮常慢,和内存读写差了⼏个数量 级,所以当我们想从表中获取某些记录时,InnoDB存储引擎需要⼀条⼀条的把记录从磁盘上读出来么?原创 2023-06-13 14:40:42 · 37 阅读 · 0 评论 -
2.InnoDB记录结构
MySQL5.7默认Dynamic。这两种⾏格式类似于COMPACT⾏格式,只不过在处理⾏溢出数据时有点⼉分歧,它们不会在记录的真实数据处存储字符串的前768个字节,⽽是把所有的 字节都存储到其他⻚⾯中,只在记录的真实数据处存储其他⻚⾯的地址。行溢出:⼀个⻚⼀般是16KB,当记录中的数据太多,当前⻚放不下的时候,会把多余的数据存储到其他⻚中,这种现象称为⾏溢出。行格式,随着时间的推移,他们可能会设计出更多的行格式,但是不管怎么变,在原理上大体都是相同的。会把多余的数据存储到其他⻚中,这种现象称为⾏溢出。原创 2023-06-13 14:40:09 · 22 阅读 · 0 评论 -
1.系统架构
每当有⼀个客户端进程连接到服务器进程时,服务器进程都会创建⼀个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另⼀个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端。查询优化:语法解析之后,MySQL的优化程序会对我们的语句做⼀些优化,如外连接转换为内连接、表达式简化、⼦查询转为连接吧啦吧啦的⼀堆东⻄。服务器处理客户端请求的过程:客户端进程发送一段纯文本(MySQL语句),服务器进程处理后返回一段纯文本。原创 2023-06-13 14:41:18 · 51 阅读 · 0 评论