Study notes
为什么表数据删掉一半,表文件大小不变? 为什么表数据删掉一半,表文件大小不变?
经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题。 这里,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论。
2024-09-11
为什么我的MySQL会“抖”一下? 为什么我的MySQL会“抖”一下?
平时的工作中,不知道你有没有遇到过这样的场景,一条SQL语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。 看上去,这就像是数据库“抖”了一下。今天,我们就一起来
2024-09-11
怎么给字符串字段加索引? 怎么给字符串字段加索引?
现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题。 假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: 12345mysql> create table SUser(ID bi
2024-09-11
MySQL为什么有时候会选错索引? MySQL为什么有时候会选错索引?
前面我们介绍过索引,你已经知道了在MySQL中一张表其实是可以支持多个索引的。但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。 不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句
2024-09-10
普通索引和唯一索引,应该怎么选择? 普通索引和唯一索引,应该怎么选择?
在前面的基础篇文章中,我给你介绍过索引的基本概念,相信你已经了解了唯一索引和普通索引的区别。今天我们就继续来谈谈,在不同的业务场景下,应该选择普通索引,还是唯一索引? 不太清楚唯一索引和普通索引的右转看这篇文章: MySQL的普通索引和唯
2024-09-10
事务到底是隔离的还是不隔离的? 事务到底是隔离的还是不隔离的?
在第3篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样。也就是说,一个在可重复读隔离级别下执行
2024-09-10
行锁功过:怎么减少行锁对性能的影响? 行锁功过:怎么减少行锁对性能的影响?
在上一篇文章中,介绍了MySQL的全局锁和表级锁,今天我们就来讲讲MySQL的行锁。 MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于
2024-09-10
全局锁和表锁 :给表加个字段怎么有这么多阻碍? 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
今天我要跟你聊聊MySQL的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围,MySQL里面的锁大致可以分成
2024-09-10
深入浅出索引(下) 深入浅出索引(下)
在开始这篇文章之前,我们先来看一下这个问题: 在下面这个表T中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 下面是这个表的初始化语句。 1234567
2024-09-10
3 / 4