Mysql 功能强大的机器能否提高删除的性能?

Mysql 功能强大的机器能否提高删除的性能?,mysql,Mysql,我正在使用MySQL 5.7,并试图通过主键从Innodb表中删除1亿行 该表内置于RDS中,我通过个人PC上的SQLYOG执行删除查询 在我看来,无论哪一个客户端连接到RDS,它只向RDS发送删除查询,然后由RDS运行,不会使用客户端的资源。但是,有人告诉我,如果我连接到RDS并在一台功能强大的服务器上执行删除查询,将显著加快速度 这是真的吗?有人能解释一下吗?服务器的可靠性可能无关紧要 需要删除一个大的删除 找到要删除的行 把行锁起来,以免别人把事情弄得一团糟 保存要删除的每一行的副本(在

我正在使用MySQL 5.7,并试图通过主键从Innodb表中删除1亿行

该表内置于RDS中,我通过个人PC上的SQLYOG执行删除查询

在我看来,无论哪一个客户端连接到RDS,它只向RDS发送删除查询,然后由RDS运行,不会使用客户端的资源。但是,有人告诉我,如果我连接到RDS并在一台功能强大的服务器上执行删除查询,将显著加快速度


这是真的吗?有人能解释一下吗?

服务器的可靠性可能无关紧要

需要删除一个大的删除

  • 找到要删除的行
  • 把行锁起来,以免别人把事情弄得一团糟
  • 保存要删除的每一行的副本(在崩溃/回滚的情况下)
  • 更新索引(有些索引会延迟到
    删除操作完成后才更新)
  • 清理已删除的行(在
    COMMIT
    时间)
性能问题:

  • MySQL在一个CPU中完成了大部分工作——因此,更多的内核将无济于事
  • CPU速度不是选通因素——无论如何,今天的CPU只比十年前的CPU稍快一点
  • 磁盘速度很重要,但现在大多数机器都使用SSD
  • 云服务“提供”IOPs。这可能很重要。(但让我们尽量减少所需的IOPs数。)
  • 磁盘大小无关紧要——好吧,若您用行的旧拷贝填满磁盘,那个么它就无关紧要了
也就是说,一个更强大的服务器不会有多大帮助

可以帮助您回答以下问题:

  • 如果要删除大多数行,有一种更快的方法
  • 如果要删除的行是“旧”行,请提前计划
    分区
    。(只有当您可以将
    删除
    替换为
    删除分区
    时,这才可行)
  • 如果上述操作失败,是否要批量删除?(大约1000行的批处理几乎是最佳的。一次处理一行的速度是一次处理一行的好几倍。如果超过1000行,也买不到多少性能。)

更多详细信息:

我认为,如果您启动运行RDS的机器,这意味着。e、 g.
db.t3.micro
将比
db.t3.2xlarge
慢。请不要笑,您是否也关闭了自动提交功能?您好@bibble235谢谢您的回复。我正在使用事务执行
delete
查询。我认为它不会使用自动提交,但如果我错了,请随时纠正我……在C++中,我在连接上设置了这个连接,例如MySQL LoopRebug(MyMyScListPosiv.GET()),false;您可以在AWS上执行此操作。我相信,如果您首先删除所有其他索引(PK除外),删除行,然后重新创建索引(如果有的话)-这将加快进程。此外,如果您的表上有触发器,请考虑是否可以安全地禁用它们。如果保留未删除的行数远小于要删除的行数-首先将这些“剩余行”复制到临时表中,截断原始行可能更有效,然后将临时行复制回原始表中。只是一个仅适用于RDS的小添加:配置的磁盘大小很重要,因为它直接影响IOPS,除非使用了配置的IOPS。@Cascader-Point。云提供商人为地降低I/O速度。我的一些建议将在这方面有所帮助。