我們有一個關於mysql的表來記錄我們網站的所有訪問者。該結構如下所示MySQL查詢問題 - 計數查詢使用大量的CPU
CREATE TABLE `tblvisitors` ( `visitorURL` longtext, `visitorDatetime` datetime DEFAULT NULL, `visitorIP` varchar(255) DEFAULT NULL, `visitorID` int(10) NOT NULL AUTO_INCREMENT, `visitorUser` varchar(255) DEFAULT NULL, `visitorShow` varchar(50) DEFAULT NULL, `visitorIPcaption` varchar(255) DEFAULT NULL, `visitorIPRange` varchar(255) DEFAULT NULL, PRIMARY KEY (`visitorID`), KEY `INDEXDT` (`visitorDatetime`), KEY `INDEXIP` (`visitorIP`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
表有現在超過500萬分的記錄。
我們每半秒執行一次INSERT操作,每半秒執行一次SELECT操作,其中涉及visitorURL列上的CRITERIA和COUNT字段的Select。
查詢是:
SELECT COUNT(visitorURL) FROM tblVisitors WHERE visitorURL='http://mihirdarji.com/something'
這將拍攝的CPU使用率90%與8 GB內存的8核心服務器。
MySQL管理器顯示很多連接上面的查詢等待執行。
任何建議將受到歡迎。
解釋計劃說
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | | 1 | SIMPLE | tblVIsitors | ALL | NULL | NULL | NULL | NULL | 4293277 | Using where |
-visitorURL是longtext我不確定索引是否可以工作 - 將嘗試使用靜態東西 – Mihir 2010-02-03 07:59:51
您可以肯定地在長文本上添加索引:「對於BLOB和TEXT列上的索引,必須指定一個索引前綴長度」c.f.http://dev.mysql.com/doc/refman/5.0/en/blob.html – 2010-02-03 20:13:18