车斌的技术博客

微习惯,每天看1分钟


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

08 | 事务到底是隔离的还是不隔离的?

发表于 2022-08-23 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 12k | 阅读时长 ≈ 11 分钟

思考并回答以下问题:

阅读全文 »

06 | 全局锁和表锁:给表加个字段怎么有这么多阻碍?

发表于 2022-08-23 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 7.8k | 阅读时长 ≈ 7 分钟

思考并回答以下问题:

  • 数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。怎么理解?
  • 根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。都是什么样子的?
  • MySQL提供了一个加全局读锁的方法,命令是Flush tables with read lock (FTWRL)。全局锁的典型使用场景是,做全库逻辑备份。怎么理解?
  • 另一类表级的锁是MDL(meta data lock)。MDL不需要显式使用,在访问一个表的时候会被自动加上。MDL的作用是,保证读写的正确性。怎么理解?
  • 给一个表加字段,或者修改字段,或者加索引,需要扫描全表的数据。怎么理解?
阅读全文 »

05 | 深入浅出索引(下)

发表于 2022-08-23 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 13k | 阅读时长 ≈ 12 分钟

思考并回答以下问题:

  • 直接提供查询结果,不需要回表,索引k已经“覆盖了”我们的查询需求,我们称为覆盖索引。怎么理解?
  • 在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。怎么理解索引下推?
  • 优化的一个方向是减少回表。怎么理解?
阅读全文 »

04 | 深入浅出索引(上)

发表于 2022-08-23 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 9.2k | 阅读时长 ≈ 8 分钟

思考并回答以下问题:

  • 为什么哈希表这种结构适用于只有等值查询的场景?因为不是有序的,所以哈希索引做区间查询的速度是很慢的。怎么理解?
  • 有序数组在等值查询和范围查询场景中的性能就都非常优秀,在需要更新数据的时候就麻烦了。怎么理解?
  • 显然,主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。怎么理解?
阅读全文 »

03 | 事务隔离:为什么你改了我还看不见?

发表于 2022-08-21 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 8.4k | 阅读时长 ≈ 8 分钟

思考并回答以下问题:

  • 隔离得越严实,效率就会越低。因此很多时候,我们都要在二者之间寻找一个平衡点。怎么理解?
  • 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。怎么理解?
  • 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。怎么理解?
  • 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。怎么理解?
  • 对于RR,你可以这么想,每个事务启动的时候打一个快照,别人改的“我不听我不听”。怎么理解?
  • 长事务可能用到的回滚记录都必须保留,这就会导致大量占用存储空间。怎么理解?
阅读全文 »

02 | 日志系统:一条SQL更新语句是如何执行的?

发表于 2022-08-02 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 8.2k | 阅读时长 ≈ 7 分钟

思考并回答以下问题:

  • WAL的全称是Write-Ahead Logging,它的关键点就是先写日志,再写磁盘。怎么理解?
  • 有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。怎么理解?
  • redo log是InnoDB引擎特有的日志,而Server层也有自己的日志,称为binlog。为什么会有两份日志呢?
  • redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1”。怎么理解?
  • redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。怎么理解?
  • 将redo log的写入拆成了两个步骤:prepare和commit,这就是”两阶段提交”。怎么理解?
  • innodb_flush_log_at_trx_commit这个参数设置成1的时候,表示每次事务的redo log都直接持久化到磁盘。sync_binlog这个参数设置成1的时候,表示每次事务的binlog都持久化到磁盘。怎么理解?
阅读全文 »

01 | 基础架构:一条SQL查询语句是如何执行的?

发表于 2022-08-01 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 10k | 阅读时长 ≈ 9 分钟

思考并回答以下问题:

  • 不同的存储引擎共用一个Server层,也就是从连接器到执行器的部分。怎么理解?
  • wait_timeout参数是干嘛用的?长连接是什么意思?
  • 你会在数据库的慢查询日志中看到一个rows_examined的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟rows_examined并不是完全相同的。怎么理解?
阅读全文 »

语句加锁分析实例

发表于 2022-06-16 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 45k | 阅读时长 ≈ 41 分钟

思考并回答以下问题:

阅读全文 »

MySQL冷知识:t1.id=t2.id=t3.id看着咋这么怪呢?

发表于 2022-06-13 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 10k | 阅读时长 ≈ 9 分钟

思考并回答以下问题:

阅读全文 »

为什么查询列表中多了它,GROUP BY语句就会报错呢?

发表于 2022-06-13 | 更新于 2024-09-02 | 分类于 MySQL
本文字数: 13k | 阅读时长 ≈ 12 分钟

思考并回答以下问题:

阅读全文 »
上一页1…363738…57下一页
CheBin

CheBin

参与开源就是出路
561 日志
19 分类
39 标签
近期文章
  • 棋牌游戏-1
  • 第11章 并发模式:拿来即用的经验总结
  • go并发之美:多个channel合并/多个数据流合并
  • 第12章 分布式链路追踪
  • 第11章 统一认证与授权
© 2018 – 2024 CheBin | 站点总字数: 4m | 站点阅读时长 ≈ 60:19
由 Hexo 强力驱动
|
主题 – NexT.Pisces
0%