2014-02-17 3 views
1

Я запускаю форум на VPS, работающий с Percona DB, с PHP 5.5.8, кэширование Opcode и т. Д., Все это очень ориентировано на скорость.Самый быстрый способ увеличения счетчика в MySQL DB

Я также пользуюсь Новой реликвией (да, у меня есть футболка).

Как я настраиваю приложение, оптимизируя запросы, которые форум делает в БД для любого запроса в верхней части моего списка времени.

Прямо сейчас, самый трудоемкий запрос, который у меня есть, поскольку он наиболее часто используется, это простой счетчик попаданий на каждую тему.

Так запрос:

UPDATE topics SET num_views = num_views + 1 WHERE id_topic = ? 

Я не могу думать о более простой способ выполнить это, или если какой-либо из различных других способов может быть быстрее, и почему.

Есть ли способ записать этот запрос еще быстрее или индекс, который я могу добавить в поле для ускорения?

Спасибо.

ответ

1

Предполагая, что id_topic проиндексирован, вы не поправляетесь. Единственная рекомендация, которую я хотел бы сделать, - посмотреть на другие индексы этой таблицы и убедиться, что у вас нет избыточных, которые включают в себя num_views. Это снизит скорость обновления для этого обновления.

Например, если вы имели следующие показатели

  1. (some_column, NUM_VIEWS)
  2. (some_column, NUM_VIEWS, another_column)

Index # 1 будет посторонняя и просто добавить к вставка/обновление

+0

Привет, спасибо. Я не думал, что это можно сделать быстрее, но я подумал, что, возможно, применение чего-то вроде LIMIT = 1 (хотя бы только один id_topic) может улучшить его скорость, если внутренне это делает предложение WHERE более длительным. Кроме того, ваше упоминание индексов заставило меня взглянуть на индексы, и есть 8 индексов, некоторые дубликаты и нет в поле id_topic! Так что спасибо за то, что разобрали эту проблему для меня! :) –

+0

@ i-CONICA, если id_topic - уникальный индекс (например, первичный ключ), добавляющий лимит после того, как не поможет. Если это не уникально, я бы смутился тем, как вы смотрите на него в одиночку. – Ray

+0

да, это первичный ключ, спасибо еще раз. –

0

Не уверен, что это улучшение, но вы можете проверить следующее:

Как только добавление строки для каждой страницы попадает в таблицу вместо блокировки и обновления строки?

А затем использовать счетчик для получения результатов и кэшировать их вместо того, чтобы делать счет каждый раз?

(И, может быть, уплотнение стола один раз в день?)

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

  • Нет связанных вопросов^_^