0

当您SELECT MIN(x) FROM blah;同时执行一个表时,MySQL 的行为如何,该表正在经历数千次DELETE操作?

min() 的结果是否会显示已删除的条目?如果不是,它如何防止从已删除的条目中返回值?

这是因为我们有一个大型数据库,其中 min() 运行了几个小时,但在此期间不断发生删除。

4

1 回答 1

1

阅读https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html了解 InnoDB 中的一致性读取。每个 SELECT 语句都保证查看一种数据“快照”,在 SELECT 语句运行时不会更改。

所以你是对的,你确实有 SELECT 语句返回一个值的风险MIN(x),因为它在你的 SELECT 语句完成后将不存在,因为它同时被删除了。

这是我们为在不阻塞并发更新/删除的情况下自由进行读取查询所付出的代价。

顺便说一句,如果您想MIN(x)快速返回,请创建一个索引,x并将其作为第一列。

于 2019-03-04T17:11:30.800 回答