
MYSQL
文章平均质量分 96
学习MYSQL
sco5282
这个作者很懒,什么都没留下…
展开
-
【MYSQL】MYSQL 的学习教程(十三)之 MySQL的加锁规则
MySQL 分成了 Server 层和存储引擎两部分,每当执行一个查询时,Server 层负责生成执行计划,然后交给存储引擎去执行。弄懂了上面两个认识,会对后续大家理解有很大帮助。例如:对于进行分析的时候,为什么会出现说第一次加锁是精确查询?它明明是范围查询呀!这是因为第一次是要寻找到 id = 5 的记录,对于 Innodb 来说,它就是精确查找,不是范围查找。随后找到 id = 5 的记录之后,就要找 id > 5 的记录了,此时就变成了范围查找了。原创 2024-01-09 15:16:40 · 1475 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(十二)之 MySQL 啥时候用记录锁,啥时候用间隙锁
在「读未提交」和「读已提交」隔离级别下,都只会使用;而对于「可重复读」隔离级别来说,会使用那么 MySQL 啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用 Next-Key 锁呢?原创 2024-01-08 16:48:12 · 1337 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(十一)之 MySQL 不同隔离级别,都使用了哪些锁
在「读未提交」隔离级别下,读写操作可以同时进行,但写写操作无法同时进行。与此同时,该隔离级别下只会使用行级别的记录锁,并不会用间隙锁在「读已提交」隔离级别下,只会使用行级别的记录锁,并不会用间隙锁。在「可重复读」隔离级别下,使用了记录锁、间隙锁、Next-Key 锁三种类型的锁可重复读存在幻读的问题,但实际上在 MySQL 中,因为其使用了间隙锁,所以在「可重复读」隔离级别下,可用加锁解决幻读问题。因此,MySQL 将「可重复读」作为了其默认的隔离级别。原创 2024-01-06 11:20:03 · 1403 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(十)之 InnoDB 锁
表锁:当存储引擎不支持行级锁时,使用表锁;SQL 语句没有匹配到索引时,使用表锁元数据锁:对表做增删改查时,会加上 MDL 读锁。对表结构做变更时,会加上 MDL 写锁意向锁:对表中的行记录加锁时,会用到意向锁行级锁:增删改查匹配到索引时,会使用行级锁。原创 2023-12-28 16:24:21 · 1410 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(九)之 23 个 SQL 优化小技巧
这篇文章从 15 个方面,分享了 sql 优化的一些小技巧,希望对你有所帮助。原创 2023-12-26 13:57:00 · 1003 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(八)之 索引失效场景
当内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存页为**“脏页”。内存数据写入到磁盘后,内存和磁盘上的数据页的内容就一致了,称为“干净页”**。一般有更新 SQL 才可能会导致脏页。原创 2023-12-25 18:04:29 · 3330 阅读 · 2 评论 -
【MYSQL】MYSQL 的学习教程(七)之 索引为什么要用 B+ 树
开启 profiling 参数后,后续执行的 SQL 语句都会记录其资源开销,包括 IO,上下文切换,CPU,内存等等,我们可以根据这些开销进一步分析当前慢 SQL 的瓶颈再进一步进行优化。profile 只能查看到 SQL 的执行耗时,但是无法看到 SQL 真正执行的过程信息,即不知道 MySQL 优化器是如何选择执行计划。定义,默认是 15。如果我们需要看单独某条 SQL 的分析,可以 show profile 查看最近一条 SQL 的分析,也可以使用。表示查询时能够使用到的索引(显示的是索引名称),原创 2023-12-25 18:03:32 · 1355 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(六)之 索引
Buffer Pool 是 MySQL 的一个非常重要的组件,因为针对数据库的增删改操作都是在 Buffer Pool 中完成的Undo log 记录的是数据操作前的样子redo log 记录的是数据被操作后的样子(redo log 是 Innodb 存储引擎特有)bin log 记录的是整个操作记录(这个对于主从复制具有非常重要的意义)首先执行器根据 MySQL 的执行计划来查询数据,先是从缓存池中查询数据,如果没有就会去数据库中查询,如果查询到了就将其放到缓存池中。原创 2023-12-22 17:34:07 · 1289 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(五)之 MYSQL 日志文件:undo、redo、bin log
阶数:一个节点最多有多少个孩子节点。(一般用字母m表示)关键字:节点上的数值就是关键字度:一个节点拥有的子节点的数量。B- 树(B树)是一种平衡的多叉树,它比较适用于对外查找一颗 m 阶的 B- 树,有以下特征:根结点至少有两个子女;每个非根节点所包含的关键字个数 j 满足:⌈m/2⌉ - 1原创 2023-12-22 10:39:55 · 1260 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(四)之 一条 SQL 语句的执行流程
当操作符左右两边的数据类型不一致时,会发生隐式转换当查询字段为数值类型时发生了隐式转换,那么对效率影响不大,但还是不推荐这么做当查询字段为字符类型时发生了隐式转换,那么会导致索引失效,造成全表扫描效率极低字符串转换为数值类型时,非数字开头的字符串会转化为 0,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果所以,我们在写 SQL 时一定要养成良好的习惯,查询的字段是什么类型,等号右边的条件就写成对应的类型。原创 2023-12-20 10:16:55 · 1694 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(三)之 InnoDB 结构
回表:当查询的数据在索引树中,找不到的时候,需要回到主键索引树中去获取,这个过程叫做回表需要查询所有列的数据,idx_age 普通索引不能满足,需要拿到主键 id 的值后,再回到id主键索引查找获取,这个过程就是回表如果我们查询 SQL 的select *修改为的话,其实是不需要回表的。因为 id 和 age 的值,都在idx_age 索引树的叶子节点上覆盖索引是 select 的数据列只用从索引中就能够取得,不必回表,换句话说,查询列要被所建的索引覆盖。所以,在日常开发中,尽量不要。原创 2023-12-19 11:51:05 · 1138 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(二) 之 InnoDB 数据页结构
在实际开发中,大部分的情况下都不是从单表中查询数据,一般都是多张表联合查询取出最终的结果。一个业务都会对应多张表,比如:学生和班级,起码两张表③:内连接和外连接的区别:假设 A 和 B 表进行连接。原创 2023-12-06 14:41:11 · 1368 阅读 · 0 评论 -
【MYSQL】MYSQL 的学习教程(一) 之 MYSQL 简介 & 架构 & 存储引擎
连接层为每个连接分配一个线程,该线程用来控制查询的执行。当连接通过用户名/密码的认证后,该连接可以发送 SQL 查询。连接层接受通过协议的应用程序连接。连接协议通过客户端的库及驱动实施,连接协议的速度因本地设置而异。上述协议中,MySQL 可以通过 TCP/IP 协议在网络间传送消息,其他的协议仅支持在本地使用(客户端和服务器必须在同一台主机上)TCP/IP协议除了用于网络间的远程连接,也可以用于本地连接。使用TCP/IP协议时需要使用IP地址或者DNS名称标识主机,并使用端口号标识服务。原创 2023-12-05 16:29:28 · 1020 阅读 · 0 评论