私は単純なユーザーテーブルを持っています:
userID | credits | name | etc | etc1 | etc2
簡単なクエリを実行します。
UPDATE users set credits = (credits - 10) where userid = 9
このテーブルには 2000 行あります。このクエリに 0.16 秒かかるのはなぜですか? どうすれば高速化できますか?
userid は主キーであるため、すでにインデックスがあります。したがって、なぜこのクエリが遅くなる可能性があるのか 考えられません。特に、16 GB の RAM とキラー プロセッサを備えたサーバー上で実行される唯一のクエリ、ONCE であることを確認します。サーバー上には、リソースを占有する可能性のあるものは文字通り他にありません。
何か案は?
編集
これは私が時間を計る方法です:
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です。
次に、users テーブルの作成のエクスポートを示します。
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 ;