2013-06-15 3 views
2

У меня есть таблица (1), которая содержит общее количество записей для таблицы (2). Я делаю это так, чтобы я мог быстро показать пользователям общую стоимость без необходимости запускать подсчет количества раз, когда страница поднимается.Предложение по производительности PHP/MySQL

Мой вопрос:

Я обсуждают ли или не обновлять это значение всего записей в таблице (1), как новые записи приходят или иметь сценарий запуска каждые 5 минут, чтобы обновить значение всего записей в Таблица 1).

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

Однако, если мы выполним скрипт, он должен будет запускаться для каждой записи в таблице (1), и этот запрос на обновление будет иметь учетные записи подзаголовков из таблицы (2). Этот скрипт должен работать как каждые 5-10 минут, чтобы синхронизировать ситуацию.

стол (1) не будет быстро расти, возможно, на пике он может получить около 5000 записей. таблица (2) имеет потенциал для получения более 1 миллиона записей за короткий промежуток времени.

Хотелось бы услышать некоторые предложения.

+0

У вас есть триггеры? – slier

+0

Таблица innodb –

ответ

2

Здесь может быть полезным триггер на таблице 2, автоматически обновляющий таблицу 1 как часть одной и той же транзакции, вместо использования второго запроса, инициированного PHP. Это все еще небольшая накладная, но обрабатывается самой базой данных, а не большими накладными расходами в вашем PHP-коде и поддерживает точность таблицы 1, подсчитывает ACIDly (при условии, что вы используете транзакции)

+0

Интересно. Никогда не думал об использовании триггеров. Я собираюсь прочитать их сейчас. Спасибо. –

2

Существует разница между myisam и innodb двигатели. Если вам нужно подсчитать общее количество строк в таблице COUNT(*) FROM table, то, если вы используете myisam, вы получите это число невероятно быстро, независимо от размера таблицы (таблицы myisam уже хранят количество строк, поэтому просто читает его).

В Innodb не хранится такая информация. Но если приблизительного количества строк достаточно, можно использовать SHOW TABLE STATUS.

Если вам нужно рассчитывать на чем-то, COUNT(*) FROM table WHERE ... то есть два различных варианта:

  • либо поставить индекс на что что-то, и сосчитать будет быстро
  • использовать триггеры/логика приложения автоматически обновить в другую таблицу
Смежные вопросы