【发布时间】:2014-10-24 01:34:57
【问题描述】:
在过去的几个月里,我的主机一直在向我发送消息,说我的网站使用了太多的 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 秒,有时是几秒?
这里是显示创建表:
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
【问题讨论】:
标签: mysql indexing sql-update