Gumihoy
21 | 为什么我只改一行的语句,锁这么多 21 | 为什么我只改一行的语句,锁这么多
在上一篇文章中,我和你介绍了间隙锁和 next-key lock 的概念,但是并没有说明加锁规则。间隙锁的概念理解起来确实有点儿难,尤其在配合上行锁以后,很容易在判断是否会出现锁等待的问题上犯错。 所以今天,我们就先从这个加锁规则开始吧。
2019-06-03
20 | 幻读是什么,幻读有什么问题 20 | 幻读是什么,幻读有什么问题
在上一篇文章最后,我给你留了一个关于加锁规则的问题。今天,我们就从这个问题说起吧。 为了便于说明问题,这一篇文章,我们就先使用一个小一点儿的表。建表和初始化语句如下(为了便于本期的例子说明,我把上篇文章中用到的表结构做了点儿修改): CRE
2019-06-03
19 | 为什么我只查一行的语句,也执行这么慢 19 | 为什么我只查一行的语句,也执行这么慢
一般情况下,如果我跟你说查询性能优化,你首先会想到一些复杂的语句,想到查询需要返回大量的数据。但有些情况下,“查一行”,也会执行得特别慢。今天,我就跟你聊聊这个有趣的话题,看看什么情况下,会出现这个现象。 需要说明的是,如果 MySQL 数
2019-06-03
18 | 为什么这些SQL语句逻辑相同,性能却差异巨大 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大
在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。 我今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。 #
2019-06-03
17 | 如何正确地显示随机消息 17 | 如何正确地显示随机消息
我在上一篇文章,为你讲解完 order by 语句的几种执行模式后,就想到了之前一个做英语学习 App 的朋友碰到过的一个性能问题。今天这篇文章,我就从这个性能问题说起,和你说说 MySQL 中的另外一种排序需求,希望能够加深你对 MySQ
2019-06-03
16 | “order by”是怎么工作的 16 | “order by”是怎么工作的
在你开发应用的时候,一定会经常碰到需要根据指定的字段排序来显示结果的需求。还是以我们前面举例用过的市民表为例,假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄。 假设这个表的部分定义是这样的: CR
2019-06-03
15 | 答疑文章(一):日志和索引相关问题 15 | 答疑文章(一):日志和索引相关问题
在浏览这些留言并回复的过程中,我倍受鼓舞,也尽我所知地帮助你解决问题、和你讨论。可以说,你们的留言活跃了整个专栏的氛围、提升了整个专栏的质量,谢谢你们。评论区的大多数的留言我都直接回复了,对于需要展开说明的问题,我都拿出小本子记了下来。这些
2019-06-03
14 | count(*)这么慢,我该怎么办 14 | count(*)这么慢,我该怎么办
在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条 select count() from t 语句不就解决了吗? 但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢
2019-06-03
13 | 为什么表数据删掉一半,表文件大小不变 13 | 为什么表数据删掉一半,表文件大小不变
经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。 这里,我们还是针对 MySQL 中应用最广泛的 InnoDB 引擎展
2019-06-03
12 | 为什么我的MySQL会“抖”一下 12 | 为什么我的MySQL会“抖”一下
平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。 看上去,这就像是数据库“抖”了一下。今天,我们就一
2019-06-03
11 | 怎么给字符串字段加索引 11 | 怎么给字符串字段加索引
现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: mysql> create table SUser( ID bigint un
2019-06-03
10 | MySQL为什么有时候会选错索引 10 | MySQL为什么有时候会选错索引
前面我们介绍过索引,你已经知道了在 MySQL 中一张表其实是可以支持多个索引的。但是,你写 SQL 语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由 MySQL 来确定的。 不知道你有没有碰到过这种情况,一条本来可以执行
2019-06-03
2 / 5