0

基本上我正在监控网站上最慢的查询。事实证明它们是这样的:

INSERT INTO beststat (bestid,period,rawView) VALUES ( 'idX' , 2012 , 1 ) 
   ON DUPLICATE KEY UPDATE rawView = rawView+1 

基本上它是一个记录表。如果该行已经存在,它会更新rawView+1

beststat所以InnoDB我有行级锁定和考虑我做了很多插入更新它应该比 MyISAM 更快。

无论如何,该查询不应该花这么长时间,也许还有其他问题。可能是什么?

当然我有Unique Index一个bestid, period

附加信息

该表( beststat)目前有约 100 万条记录,其大小为:68MB。我有4GB RAM 和innodb buffer pool size= 104,857,600。mysql:5.1.49-3

CREATE TABLE `beststat` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `bestid` int(11) unsigned NOT NULL,
 `period` mediumint(8) unsigned NOT NULL,
 `view` mediumint(8) unsigned NOT NULL DEFAULT '0',
 `rawView` mediumint(8) unsigned NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 UNIQUE KEY `bestid` (`bestid`,`period`)
) ENGINE=InnoDB AUTO_INCREMENT=2020577 DEFAULT CHARSET=utf8

请注意,我可以做一些更快的事情,例如:

UPDATE beststat SET rawView = rawView + 1 WHERE bestid = idX AND period = 2012;
if (mysql_affected_rows()==0)
  INSERT INTO beststat (bestid,period,rawView) VALUES ('idX',2012,1)

所以大多数时候我只会运行第一个查询UPDATE。但我想了解为什么第一个更简洁的查询很慢。


我发现这篇有趣的文章...仍在阅读

4

1 回答 1

-1

处理大量行,我建议使用加载日期文件来加快查询速度。为了进一步提高查询时间,您也可以考虑使用内存表。

于 2012-05-11T23:10:28.460 回答