基本上我有這個簡單的查詢:一個非常簡單的UPDATE InnoDB的查詢佔用過多
UPDATE beststat
SET rawView = rawView + 1
WHERE bestid = 139664 AND period = 201205
LIMIT 1
這需要1秒。
此表(beststat)目前有〜1mil的記錄,其大小爲:68MB。我有4GB內存和innodb buffer pool size
= 104,857,600,具有:MySQL的:5.1.49-3
這是唯一的InnoDB表在我的數據庫(其它的MyISAM)
我
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
:對,當然bestid和週期有
EXPLAIN SELECT rawView FROM beststat WHERE bestid =139664 AND period =201205 LIMIT 1
給出:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE beststat const bestid bestid 7 const,const 1
任何幫助嗎?
執行查詢continuouslu的'LIMIT 1'條款似乎沒有必要。你有沒有在查詢上運行'EXPLAIN'?它是否正確使用索引? – Ilion
@llion:你無法解釋UPDATE/INSERT查詢。我懷疑極限1影響性能 – dynamic
你可以'解釋選擇rawView從betstat哪裏bestid = 139664和時期= 201205極限1'而不是?使用這種大小的表格,您可以考慮在[bestid]上[分割](http://dev.mysql.com/doc/en/partitioning.html)。 – eggyal