小编Mic*_*icG的帖子

MySQL - 简单更新很慢

我们在单个表上进行简单更新需要很长时间时遇到问题。该表包含约 500 万行。

这是表:

CREATE TABLE Documents (
    GeneratedKey varchar(32) NOT NULL,
    SourceId int(11) NOT NULL,
    Uri longtext,
    ModifiedDateUtc datetime NOT NULL,
    OperationId varchar(36) DEFAULT NULL,
    RowModifiedDateUtc datetime NOT NULL,
    ParentKey varchar(32) NOT NULL,
    PRIMARY KEY (SourceId, GeneratedKey),
    KEY IX_RowModifiedDateUtc (RowModifiedDateUtc),
    KEY IX_ParentKey (ParentKey),
    KEY IX_OperationId (OperationId(36))
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

这是更新查询:

UPDATE Documents
SET OperationId = 'xxxx'
WHERE SourceId = 12345
AND ParentKey = '0965b3983ceb0e8e41ab47b53e37d0f3';
Run Code Online (Sandbox Code Playgroud)

此查询更新约 80k 行,大约需要60 秒才能完成,更新的行越多,所需的时间越长,这会导致超时。索引IX_ParentKey基数是 ~830k。请注意,具有相同WHERE子句的选择返回非常快(< 1s)。

查询分析:

starting …
Run Code Online (Sandbox Code Playgroud)

mysql innodb performance query-performance

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

标签 统计

innodb ×1

mysql ×1

performance ×1

query-performance ×1