删除匹配行的更快方法?

删除匹配行的更快方法?,第1张

删除匹配行的更快方法?

从InnoDB删除数据是您可以要求的最昂贵的 *** 作。正如您已经发现的那样,查询本身不是问题-无论如何,大多数查询都将针对相同的执行计划进行优化。

虽然可能很难理解为什么所有情况下的DELETE速度最慢,但是有一个相当简单的解释。InnoDB是一个事务存储引擎。这意味着,如果您的查询在中途中止,则所有记录将仍然存在,就好像什么都没有发生一样。完成后,所有内容将在同一瞬间消失。在DELETE期间,连接到服务器的其他客户端将看到记录,直到完成DELETE。

为了实现这一目标,InnoDB使用了一种称为MVCC(多版本并发控制)的技术。它的基本作用是为每个连接提供整个数据库的快照视图,就像事务的第一条语句开始时一样。为此,InnoDB内部的每个记录可以有多个值-
每个快照一个。这也是为什么在InnoDB上进行计数需要一些时间的原因-这取决于您当时看到的快照状态。

对于您的DELETE事务,将根据您的查询条件识别的每条记录都标记为删除。由于其他客户端可能同时访问数据,因此它无法立即将它们从表中删除,因为它们必须查看各自的快照以保证删除的原子性。

一旦所有记录都标记为删除,就成功提交事务。即使这样,也不能在将所有与快照值一起使用的其他事务(在DELETE事务之前)都结束之前,立即将它们从实际数据页中删除。

因此,实际上,考虑到必须修改所有记录以便以安全交易的方式准备将其删除的事实,您的3分钟并不是真的那么慢。语句运行时,您可能会“听到”硬盘工作。这是由于访问所有行引起的。为了提高性能,您可以尝试增加服务器的InnoDB缓冲池大小,并尝试在删除时限制对数据库的其他访问,从而也减少了InnoDB必须为每个记录维护的历史版本数。有了额外的内存,InnoDB也许能够将您的表(大部分)读到内存中,从而避免了一些磁盘搜索时间。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5011809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存