#mysql #performance #web-applications
#mysql #Производительность #веб-приложения
Вопрос:
Вот мой вопрос. У нас есть веб-приложение, которое позволяет пользователю играть, и каждый раз ‘play’ (одним щелчком мыши) обновляет количество в базах данных. Фактический sql может выглядеть следующим образом:
UPDATE `play_counts` SET `counts` = counts 1, `modified` = '2011-06-01 00:00:00' WHERE `campaign_id` = 3;
Query_time: 2.564047 Lock_time: 0.000030 Rows_sent: 0 Rows_examined: 1
Довольно долгое время все было нормально, пока недавно не появилось сообщение в журнале медленных запросов mysql. Есть ли какие-либо предложения по улучшению производительности?
Я подумываю о «кэшировании» количества на другом носителе (вдали от базы данных) и некоторое время обновляю db с помощью пакетного ввода. Но я рад услышать больше.
Обновить
play_counts
Таблица — это не что иное, как ведение подсчетов, и ее PK равен campaign_id.
В настоящее время мы используем движок InnoDB. Лучше ли перейти на MyISAM?
UPDATE2 Обычно sql занимал всего 0,01 секунды, но только в некоторых случаях это занимало 2 секунды. Я думаю, что что-то не так, помимо настройки индекса или sql.
Комментарии:
1. Есть ли у вас индекс на
play_counts.campaign_id
?2. Упс! Что я пропустил! Спасибо, что обратили на меня внимание.
3. Нет проблем, кинопио — вам не хватало индекса?
4. Да, какой позор! Я добавил индекс в play_counts.campaign_id.
5. Не переходите на MyISAM, преимущества InnoDB намного перевешивают потерю производительности. В этом случае выполнение запроса занимает аномально много времени. Вы пытались это объяснить? Я подозреваю, что индекс в campaign_id поможет, если он еще не установлен. Кроме того, modified=NOW () может быть лучше, если только вам не нужна временная часть datetime, и в этом случае зачем вы ее сохраняете?