我的主人在过去几个月里一直向我发送消息,说我的网站使用了太多的MySQL分钟。他们还会发送一些日志,显示哪些查询有时会耗尽最多的时间。有些查询很长很复杂,所以我理解为什么它们会成为一个问题。但是有一些让我摸不着头脑。我接下来要关注的是:
UPDATE parentmessages SET views=views+1 WHERE parentid='11308'
这个数字只是一个例子,可能是任何一个parentid。 parentmessages表有parentid作为主键,所以我认为它将被索引并且很容易找到。表中有大约11,000条记录,实际上并不多。以下是我的主持人给我的数字:这个查询昨天占用了6个实例多长时间:
我认为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
答案 0 :(得分:0)
一个原因可能是,另一个慢查询阻塞了表,而您的更新只是等待另一个查询完成。
答案 1 :(得分:0)
不要使用MyISAM。我忘记是谁说的,也许PeterZ但是#34;使用myisam意味着你不关心你的数据"。最简单的方法是检查表锁定是否要查看进程列表。转储,插入,更新等都将锁定表。 MyISAM在5.6中已经全部弃用了。