【问题标题】:Delete query mysql - need clarification删除查询mysql - 需要澄清
【发布时间】:2015-12-20 20:16:45
【问题描述】:
delete from tablename where id in ('val1','val2',....,'val6000');

'id' 是一个 FK 列 [char(50)]

IN 查询子句包含 6000 个值

12 分 10 秒后,从表 'tablename' 中删除 1270000 行。

tablename 包含 2 个索引列,一个 PK 和一个 FK('id' 是 FK col)。

我的疑问是,需要更多时间,是删除 1270000 行的时间吗?还是解析 where 子句以确定要删除的行?

有没有办法减少这个执行时间?

【问题讨论】:

  • 如果为每个 id 运行单独的查询会发生什么?
  • 解析查询会很小。删除包含几个索引的表中的近 130 万行需要 12 分钟,这似乎是一个非常不错的数字。
  • @Pekka:我没有尝试为每个 id 单独运行查询。认为那不是更好的方法。
  • @e4c5:但是相同的查询在 MS SQL 中只运行了大约两分钟,并且存在相同数量的数据
  • 嗨@Pekka웃我尝试批量删除查询,这意味着在“in”查询中不是6000个值,而是用1000个值尝试了6次,但花了42分钟。所以单查询似乎是最好的。但我试图从 9 分钟减少到至少 3 到 4 分钟。

标签: mysql database-performance delete-row


【解决方案1】:

请检查您的 MySQL 服务器的配置 innodb_buffer_pool_size

如果它很小,请将其更改为更大的值 - 例如 2 GB,然后重试。

也许您在将数据放入当前 buffer_pool 时遇到问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2020-10-13
    • 2011-11-09
    • 2012-07-18
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多