J'ai un simple tableau d'utilisateurs :
userID | credits | name | etc | etc1 | etc2
Je fais une simple requête :
UPDATE users set credits = (credits - 10) where userid = 9
Ce tableau comporte 2000 lignes. Pourquoi cette requête prend-elle 0,16 seconde et comment puis-je la rendre plus rapide ?
userid est la clé primaire et a donc déjà un index sur elle. Je ne vois donc pas pourquoi cette requête pourrait être lente. D'autant plus que c'est la SEULE requête qui est exécutée, UNE FOIS, sur un serveur avec 16 Go de RAM et un processeur qui tue. Il n'y a littéralement rien d'autre sur le serveur qui pourrait monopoliser des ressources.
Des idées ?
EDIT
C'est comme ça que je le chronomètre :
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);
}
}
Les crédits sont une INT.
Et voici une exportation de la création de la table des utilisateurs :
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 ;