小编Cra*_*obs的帖子

MySQL DELETE 因大量行而变得异常缓慢

对 Prices 表中的大量行执行 DELETE 时,DELETE 会逐渐变慢。如果删除 15,000 行,它会在大约 15 秒内运行。20K 行需要 3 或 4 分钟。40,000 行需要 15 分钟,100,000 行运行一个多小时。

下面的 After DELETE 触发器使用可用价格类型的计数更新 Items 表。这用于计算价格以加快生产过程。

两个表都是InnoDB,我把innodb_buffer_pool_size更新为4G,没有效果。

我已经验证所有 SQL 语句都使用索引。Prices 表上有一个PriceType + ItemID 索引,ItemID 是Items 表的主键。

不幸的是,这个架构是由另一个应用程序确定的,我无法修改表结构。我可以修改触发器、索引等。无法更改该应用程序以直接更新 Items 表中的计数。

BEGIN

    DECLARE iPriceTypeA INT;
    DECLARE iPriceTypeB INT;
    DECLARE iPriceTypeC INT;

    SET iPriceTypeA = (SELECT COUNT(*) FROM Prices WHERE PriceType='A' AND ItemID=OLD.ItemID),
        iPriceTypeB = (SELECT COUNT(*) FROM Prices WHERE PriceType='B' AND ItemID=OLD.ItemID),
        iPriceTypeC = (SELECT COUNT(*) FROM Prices WHERE PriceType='C' AND ItemID=OLD.ItemID);

    UPDATE …
Run Code Online (Sandbox Code Playgroud)

mysql trigger performance delete query-performance

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

delete ×1

mysql ×1

performance ×1

query-performance ×1

trigger ×1