MYSQL:使更新查询更快?

MYSQL:使更新查询更快?,mysql,Mysql,我有一个简单的用户表: userID | credits | name | etc | etc1 | etc2 我做一个简单的查询: UPDATE users set credits = (credits - 10) where userid = 9 这个表有2000行。为什么此查询需要0.16秒?如何加快查询速度 userid是主键,因此已经有了索引。所以我想不出为什么这个查询可能会很慢。尤其是在拥有16GB内存和杀手级处理器的服务器上,它是唯一执行一次的查询。实际上,服务器上没有其他任何

我有一个简单的用户表:

userID | credits | name | etc | etc1 | etc2
我做一个简单的查询:

UPDATE users set credits = (credits - 10) where userid = 9
这个表有2000行。为什么此查询需要0.16秒?如何加快查询速度

userid是主键,因此已经有了索引。所以我想不出为什么这个查询可能会很慢。尤其是在拥有16GB内存和杀手级处理器的服务器上,它是唯一执行一次的查询。实际上,服务器上没有其他任何东西会占用任何资源

有什么想法吗

编辑

我就是这样计时的:

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);
    }

  }
credits是一个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 ;

您的数据库引擎提供表锁定或行级锁定这可能会改变速度,创建存储过程和仅传递参数可能会更快我没有尝试另一方面,您可以尝试批处理crud。例如,20次sql执行是一次提交。您可以尝试在现有数据旁边添加另一个字符串索引类型是
学分
?不可能花那么长时间。是否直接从控制台对命令计时?报告表的引擎和create语句。或者联系你最喜欢的算命师。@Barnar:Credits是一个int..@PanupanL:我正在PHP代码中计时。@莱昂纳多:我该怎么报告呢?你的MySQL服务器位于同一台机器上吗?如果是的话,那肯定是PHP代码的问题。如果数据库服务器位于不同的计算机上,则使用持久连接可能有助于减少多个请求的响应时间。