2013-04-09 4 views
1

У меня есть простые пользователи таблицы:MYSQL: быстрее выполнить запрос на обновление?

userID | credits | name | etc | etc1 | etc2 

я сделать простой запрос:

UPDATE users set credits = (credits - 10) where userid = 9 

Эта таблица содержит 2000 строк. Почему этот запрос занимает 0,16 секунды и как я могу сделать это быстрее?

userid является основным ключом и поэтому уже имеет индекс на нем. Поэтому я не могу понять, почему этот запрос может быть медленным. Особенно, поскольку это ТОЛЬКО запрос, выполняемый, ONCE, на сервере с 16 ГБ ОЗУ и процессором-убийцей. На сервере буквально нет ничего, что могло бы затормозить любые ресурсы.

Любые идеи?

EDIT

Это, как я время это:

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 ; 
+0

Какой тип данных является «кредитами»? – Barmar

+1

Ни в коем случае это не так долго. Вы управляете командой непосредственно с консоли? – panupan

+1

Сообщить о движке вашего стола и создать инструкцию. Или свяжитесь со своим любимым гадателем. –

ответ

0

ваш двигатель базы данных обеспечивает блокировка таблицы или строки уровень блокировки, это может изменить скорость и создания хранимой процедуры и передавая только параметры, может быть быстрее, я не попробуйте, с другой стороны, вы можете попробовать выполнить пакетную обработку. Например, 20 sql-исполнений - одно commit.and вы можете попытаться добавить еще один индекс строки вместе с существующим

Смежные вопросы