07 | 行锁功过:怎么减少行锁对性能的影响二阶段锁协议:在执行某条SQL时加锁,在事务提交后统一释放锁。设置锁等待的超时时间:innodb_lock_wait_timeout,默认情况下是50秒。发起死锁检测,innodb_deadlock_detect设置为on,默认情况下是on,缺点就是会耗费大量的CPU资源(发现死锁后主动回滚某一个事务,让其他事务得以继续执行)。如果你的事务中需要锁多个行
转载 2023-10-12 06:43:36
193阅读
《沉淀》是云栖社区品牌栏目,在品味技术人百味人生的同时,也能够帮助你沉淀技术,获得点拨。工作中,如果有不错的大牛让你受益匪浅,也欢迎通过电子邮件(lose.zy@alibaba-inc.com)推荐采访,让更多人受益。我们的想法是:“如果你觉得某个技术挺棒的,不妨品味这些技术人背后的沉淀。” 认为,MySQL设计简单,非常适合初创公司使用 (真
转载 2023-12-18 13:13:36
100阅读
# MySQL45的数据库世界 在现代应用程序的开发中,数据库的作用至关重要。MySQL是最流行的开源数据库之一,广泛应用于各种网站和应用中。在这篇文章中,我们将深入探讨MySQL的基本概念、使用方法及其在开发中的应用,借助的“mysql45”中的一些核心思想,帮助大家更好地理解MySQL。 ## 1. MySQL的简介 MySQL是一个基于关系的数据库管理系统,使用结构化查询
原创 9月前
57阅读
01 | 基础架构:一条SQL查询语句是如何执行的?MySQL架构图左侧图是老师原本的图,右侧是个人理解所画的,按照在文中的理论来说,个人认为应该是先查询缓存,如果查不到才会进行词法分析,比如有一条SQL:select * from T where ID = 10;,先去缓存中以该条SQL为key开始查询缓存,如果没查询到才会开始解析该SQL,通过select关键词分析可以知道该条SQL是要做
转载 2023-12-01 11:20:05
125阅读
23 | MySQL是怎么保证数据不丢失的?事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。每一个线程都会分配一个binlog cache,由参数binlog_cache_size控制单个线程内binlog cache的大小,如果超过了这个参数规定的大小,那么就会暂存到磁盘的临时空间中。在事务提价后,会清空binlog ca
转载 2024-04-22 15:01:03
86阅读
        如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事务 T 看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。    &nbsp
转载 2024-07-25 16:38:11
107阅读
05 | 深入浅出索引(下)覆盖索引:如果查找的列本身就在二级索引上,那么就不要回表了,这样子的索引叫做覆盖索引,通常用来减少回表的次数以提高性能。联合索引:使用多个字段组合的索引,假设有联合索引(a,b),那么在索引树中它会先根据a的大小进行排序,如果有相同值的a在按照b的大小进行排序。最左前缀:可以是联合索引的最左N个字段,比如说有联合索引(a,b,c),那么等值查询条件是a = 1的时候会用
转载 2024-01-08 15:45:07
65阅读
索引维护image.pngB+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护。以上面这个图为例,如果插入新的行 ID 值为 700,则只需要在 R5 的记录后面插入一个新记录。如果新插入的 ID 值为 400,就相对麻烦了,需要逻辑上挪动后面的数据,空出位置。而更糟的情况是,如果 R5 所在的数据页已经满了,根据 B+ 树的算法,这时候需要申请一个新的数据页,然后挪动部分数据过去。这个过
[3. 事务隔离:为什么你改了我还看不见?]基本概念复习:事务的特性:原子性、一致性、隔离性、持久性多事务同时执行的时候,可能会出现的问题:脏读、不可重复读、幻读事务隔离级别:读未提交、读提交、可重复读、串行化 一.Mysql的隔离级别1.读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。(可以读到其他事务未提交的数)2.读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。(
为什么要有索引?索引的作用是什么?索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本书我们可以通过目录中快速的定位其中的某一个知识点;对于数据库而言索引其实就是它的目录,可以通过索引快速的定位都某一条或多条记录。常见索引模型Hash表哈希表是一个以 键-值(key-value) 存储数据的结构,我们只要输入待查找的值即 key,就可以找到对应的值即 value。结构特点把值放在数组里
课程内容1.基础架构:一条SQL查询语句是如何执行的?首先我们在学习Mysql的时候,一开始是不会学习很深的原理的都是先学习操作。比如下面这条SQL查询语句。mysql> select * from T where ID=10;可以知道我们是查询当ID=10时所有字段的内容。但现在我们要把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,能够对 MySQL 有更深入的理
转载 2024-01-29 10:33:53
56阅读
1点赞
1评论
16 | order by 是怎么工作的?Extra字段中显示Using filesort表示需要排序。MySQL会给每个线程分配一块内存用于排序,称为sort_buffer,将满足条件的记录放入到该缓冲区中,然后根据指定字段排序。排序这个动作,可能在内存中完成,也可能需要使用外部排序,这取决于排序所需的内存和参数sort_buffer_size。sort_buffer_size是MySQL为排序
03 | 事务隔离:为什么你改了我还看不见事务的特性:ACID,即对应原子性、一致性、隔离性、持久性。通过undo log来保证原子性,能够撤销事务内的所以操作来保证原子性,要么是全部都成功,通过redo log来保证持久性,会根据策略进行刷脏,通过锁+MVCC的方式来保证隔离性,而一致性指的是从一个正确的状态迁移到另外一个正确的状态下,其实就是通过事务中的AID来保证C。并发事务可能出现的问题:
04 | 深入浅出索引(上)B+树特点:1、非叶子结点不保存数据,只用于索引,所有数据保存在叶子结点。2、叶子结点之间使用指针相连,并且按照从小到大的顺序排列。3、子结点元素中的最大值或是最小值出现在父结点的元素中。哈希索引:以键值对的结构存储数据,只要输入键就可以找到对应的值,通过key计算出它要存储的位置,但可能会发生碰撞,就是不同的key落到同一个位置上了,这就形成了链表,是不是就是Hash
转载 2023-11-27 07:09:53
67阅读
14 | count(*) 这么慢,我该怎么办?InnoDB下count的实现方式是一行一行地读取数据然后累积计数,这也是为什么记录越来越多会导致查询越来越慢。之所以这么设计是因为一行数据可能存在多个版本,InnoDB也无法确定,只能一行一行地获取并判断。InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*
转载 2024-06-04 13:02:56
16阅读
MYSQL实战-------(极客时间)学习笔记1.基础架构:一条sql查询语句是如何执行的?mysql> select * from T where ID=10; 2.基础架构:一条sql更新语句是如何执行的?mysql> update T set c=c+1 where ID=2; redo log(1)存储引擎的日志,InnoDB特有的;(2)物理日志(3
12 | 为什么我的MySQL会抖一下?这一篇将的云里雾里的感觉,比如数据页和redo log的脏页到底是一起刷还是分开刷的,还有它们之间的LSN是如何比较的,这部分应该属于很复杂的内容,老师说后续的篇章会阐述这块的内容,等着吧。内存中的数据页什么情况下会刷盘redo log缓冲池满了,放不下脏页了(在这种情况下个人理解也会触发redo log刷盘)。系统内存不足,当需要新的数据页而内存不足时
转载 2023-11-13 10:27:22
152阅读
06 | 全局锁和表锁:给表加个字段怎么有这么多阻碍全局锁:对整个数据库实例加读锁,命令是Flush tables with read lock,使用这个命令后其他线程的增删改、修改表结构、建表将会被阻塞(使用unlock tables可以解除)。主要用来做全局备份。为什么使用全局锁而不要使用全库只读(set global readonly = true):一方面是readonly通常会被用来做其
转载 2024-01-14 21:06:16
103阅读
一.概述[1.基础架构:一条SQL查询语句是如何执行的?]Mysql可以分为Server层和存储引擎两部分下面的是mysql的逻辑架构图1.Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。且****不同的存储引擎共用一个Se
1.基础架构:一条sql查询语句是如何执行的?mysql> select * from T where ID=10;.基础架构:一条sql更新语句是如何执行的?mysql> update T set c=c+1 where ID=2; redo log(1)存储引擎的日志,InnoDB特有的;(2)物理日志(3)循环写,空间固定会用完;binlog (1)server端日志,
转载 2023-12-11 20:39:01
1115阅读
  • 1
  • 2
  • 3
  • 4
  • 5