1
我有一個簡單的用戶表:MYSQL:使更新查詢更快?
userID | credits | name | etc | etc1 | etc2
我做一個簡單的查詢:
UPDATE users set credits = (credits - 10) where userid = 9
此表有2000行。爲什麼這個查詢需要0.16秒,我怎樣才能讓它更快?
userid是主鍵,因此已經有一個索引。所以我想不出爲什麼這個查詢可能會很慢。特別是看到它是隻有在16GB RAM和殺手級處理器的服務器上執行的唯一查詢。事實上,服務器上沒有其他任何東西可以佔用任何資源。
任何想法?
編輯
這是我的計時:
private function slowQueryEvaluator($startTime, $endTime, $identifier) {
$MAX_TIME = 0.1;
$IP = Controller::getRealIpAddress();
$userID = -1;
if (isset(YII::app()->user->id)) {
$userID = YII::app()->user->id;
}
$seconds = $endTime - $startTime;
if ($seconds > $MAX_TIME) {
YII::log($IP.' - '.$userID.' - '.$seconds.' seconds - '.$identifier);
}
}
學分是INT。
這裏是用戶表的創建導出:
CREATE TABLE IF NOT EXISTS `users` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`cell_nr` varchar(12) NOT NULL,
`status` varchar(20) NOT NULL DEFAULT 'INACTIVE',
`full_name` varchar(255) NOT NULL,
`public_name` varchar(20) NOT NULL,
`credits` int(11) NOT NULL DEFAULT '0',
`national_id` varchar(20) NOT NULL,
`email_address` varchar(255) NOT NULL,
`OTP` int(5) NOT NULL,
`OTP_count` int(11) NOT NULL DEFAULT '0',
`password` char(32) NOT NULL,
`created` int(11) NOT NULL,
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
什麼數據類型是「credits」? – Barmar 2013-04-09 21:40:03
沒有辦法需要那麼久。您是否直接從控制檯計時命令? – panupan 2013-04-09 21:41:26
報告您的表格的引擎並創建語句。或者聯繫你最喜歡的算命先生。 – 2013-04-09 21:41:29