05 深入浅出索引(下) 05 深入浅出索引(下)在上一篇文章中,我和你介绍了 InnoDB 索引的数据结构模型,今天我们再继续聊聊跟 MySQL 索引有关的概念。 在开始这篇文章之前,我们先来看一下这个问题: 在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 下面是这个表的初始化语句。 mysq 2022-08-23 专栏 > MySQL实战45讲
01 基础架构:一条SQL查询语句是如何执行的? 01 基础架构:一条SQL查询语句是如何执行的?这是专栏的第一篇文章,我想来跟你聊聊 MySQL的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时: mysql& 2022-08-23 专栏 > MySQL实战45讲
03 事务隔离:为什么你改了我还看不见? 03 事务隔离:为什么你改了我还看不见?提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。 转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100块钱,完全可以借着这个时间差再查 2022-08-23 专栏 > MySQL实战45讲
04 深入浅出索引(上) 04 深入浅出索引(上)提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个 SQL查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?今天就让我们一起来聊聊这个话题吧。 数据库索引的内容比较多,我分成了上下两篇文章。索引是数据库系统里面最重要的概念之一,所以我希望你能够耐心看完。在后面的实战 2022-08-23 专栏 > MySQL实战45讲
06 全局锁和表锁 :给表加个字段怎么有这么多阻碍? 06 全局锁和表锁 :给表加个字段怎么有这么多阻碍?今天我要跟你聊聊 MySQL的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。今天这篇文章,我会和你分享全局锁和表级锁。而关于行锁的内容 2022-08-23 专栏 > MySQL实战45讲
07 行锁功过:怎么减少行锁对性能的影响? 07 行锁功过:怎么减少行锁对性能的影响?在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。 2022-08-23 专栏 > MySQL实战45讲
08 事务到底是隔离的还是不隔离的? 08 事务到底是隔离的还是不隔离的? 你好,我是林晓斌。你现在看到的这篇文章是我重写过的。在第一版文章发布之后,我发现在介绍事务可见性规则时,由于引入了太多概念,导致理解起来很困难。随后,我索性就重写了这篇文章。现在的用户留言中,还能看到第一版文章中引入的 up_limit_id 的概念,为了避免大家产生误解,再此特地和大家事先说明一下。 我在第 3 篇文章和你讲事务隔离级 2022-08-23 专栏 > MySQL实战45讲
09 普通索引和唯一索引,应该怎么选择? 09 普通索引和唯一索引,应该怎么选择?今天的正文开始前,我要特意感谢一下评论区几位留下高质量留言的同学。 用户名是 @某、人的同学,对文章的知识点做了梳理,然后提了关于事务可见性的问题,就是先启动但是后提交的事务,对数据可见性的影响。@夏日雨同学也提到了这个问题,我在置顶评论中回复了,今天的文章末尾也会再展开说明。@Justin和 @倪大人两位同学提了两个好问题。 对于能够 2022-08-23 专栏 > MySQL实战45讲
10 MySQL为什么有时候会选错索引? 10 MySQL为什么有时候会选错索引?前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的。但是,你写 SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由 MySQL 来确定的。 不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执行速度变得很慢? 我们一起来看一个例子吧。 我 2022-08-23 专栏 > MySQL实战45讲
11 怎么给字符串字段加索引? 11 怎么给字符串字段加索引?现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: mysql> create table SUser( ID bigint unsigned primary key, email varchar(64), ... )engin 2022-08-23 专栏 > MySQL实战45讲