为什么这个简单的MySQL更新查询需要这么长时间?

时间:2014-10-24 01:34:57

标签: mysql indexing sql-update

我的主人在过去几个月里一直向我发送消息,说我的网站使用了太多的MySQL分钟。他们还会发送一些日志,显示哪些查询有时会耗尽最多的时间。有些查询很长很复杂,所以我理解为什么它们会成为一个问题。但是有一些让我摸不着头脑。我接下来要关注的是:

UPDATE parentmessages SET views=views+1 WHERE parentid='11308'

这个数字只是一个例子,可能是任何一个parentid。 parentmessages表有parentid作为主键,所以我认为它将被索引并且很容易找到。表中有大约11,000条记录,实际上并不多。以下是我的主持人给我的数字:这个查询昨天占用了6个实例多长时间:

以0.126455,1.472929,1.638743,3.040538,7.130041,112.498037秒完成

我认为112可能是一个随机故障,但为什么有时需要3,7秒?!我最好的选择是因为我在桌面上有很多索引,但我不太清楚MySQL知道这是否重要。为什么它有时会是1/10秒,有时甚至是几秒钟?

这是show create table:

    CREATE TABLE `parentmessages` (
 `parentid` int(7) NOT NULL AUTO_INCREMENT,
 `active` tinyint(1) NOT NULL,
 `level` int(2) NOT NULL,
 `type` varchar(10) NOT NULL,
 `hidden` tinyint(1) DEFAULT NULL,
 `sticky` tinyint(1) NOT NULL,
 `poll` tinyint(1) NOT NULL,
 `topic` varchar(120) DEFAULT NULL,
 `message` varchar(30000) NOT NULL,
 `views` int(6) NOT NULL,
 `replies` int(5) NOT NULL,
 `userid` int(7) NOT NULL,
 `datetimecalc` int(11) NOT NULL,
 `lastreplycalc` int(11) NOT NULL,
 `lastreplyuser` int(7) NOT NULL,
 `editedcalc` int(11) DEFAULT NULL,
 `editeduser` int(7) DEFAULT NULL,
 `realediteduser` int(7) DEFAULT NULL,
 `altint` int(7) DEFAULT NULL,
 `imageurl` varchar(125) DEFAULT NULL,
 `locked` tinyint(1) NOT NULL,
 `tempid` int(12) NOT NULL,
 PRIMARY KEY (`parentid`),
 KEY `useridindex` (`userid`),
 KEY `datetimecalcindex` (`datetimecalc`),
 KEY `activeindex` (`active`),
 KEY `lastreplycalcindex` (`lastreplycalc`),
 KEY `levelindex` (`level`),
 KEY `stickyindex` (`sticky`)
) ENGINE=MyISAM AUTO_INCREMENT=11716 DEFAULT CHARSET=latin1

2 个答案:

答案 0 :(得分:0)

一个原因可能是,另一个慢查询阻塞了表,而您的更新只是等待另一个查询完成。

答案 1 :(得分:0)

不要使用MyISAM。我忘记是谁说的,也许PeterZ但是#34;使用myisam意味着你不关心你的数据"。最简单的方法是检查表锁定是否要查看进程列表。转储,插入,更新等都将锁定表。 MyISAM在5.6中已经全部弃用了。