У меня есть несколько сложных запросов, результаты которых были сохранены в представлениях 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.