MySQL создает таблицы с помощью задания cron или использует Views - PullRequest
0 голосов
/ 06 мая 2011

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

Я настроил задание cron для заполнения стандартной таблицы теми же данными, которыми были заполнены представления:

DROP TABLE user_reports;
CREATE TABLE user_reports
  SELECT col1, col2, col3 FROM 
  /** COMPLEX QUERY **/
;

Теперь при выполнении запросов к заполненной кроной таблице user_reports запросам требуется почти десятая часть времени для запроса по сравнению с эквивалентным представлением.

Это общий подход? Очевидно, что каждый раз при запуске задания CRON возникает нагрузка на сервер, и это означает, что данные недоступны live .

Время, затраченное на запрос user_reports = 0,002 секунды
Время, затраченное на запрос view_user_reports = 0,018 секунды

Это все говорит о том, что, возможно, запрос, выполнение которого занимает 0,018 секунды, должен выполняться из кода приложения, а не сохраняться в представлениях? Хотя я не думаю, что он будет масштабироваться так же хорошо, как метод, управляемый cron.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

результаты которого были сохранены в представлениях MySQL

О, дорогой. Представления MySQL НЕ хранят данные.

DROP TABLE user_reports;

CREATE TABLE user_reports

... что-то не так с ....

TRUNCATE TABLE user_reports;

Не думаю, что он будет масштабироваться так же хорошо, как метод cron-управляемых

Только до тех пор, пока запрос в задании cron не займет много времени - когда это произойдет, вам нужно будет подумать о постепенном добавлении данных в предварительно обработанный набор результатов. Но на 0,018 с это просто преждевременная оптимизация.

1 голос
/ 06 мая 2011

В большинстве случаев поиск в 18 мс не влияет на производительность.Если это так, то обычно используется какое-то кэширование.Если вам нужно выполнять поиск по данным, и все в порядке, если данные незначительны, тогда ваш подход хорош.

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

...