Как реализовать Осуществленные Представления?
В противном случае, как я могу реализовать Осуществленное Представление с MySQL?
Обновление:
Следующее работало бы? Это не происходит в транзакции, которая является проблемой?
DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`;
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`;
Ваш пример приближается к материализованному представлению "полного обновления". Если исходные таблицы содержат миллионы или миллиарды строк, вам может потребоваться представление «быстрого обновления», которое часто используется в настройках хранилища данных.
Вы могли бы приблизиться к быстрому обновлению, вместо этого используя вставку / обновление (upsert), присоединяясь к существующей «таблице представлений» по первичным ключам исходных представлений (при условии, что они могут быть сохранены ключом) или сохраняя date_time последнего обновления, и используя это в критериях SQL обновления, чтобы сократить время обновления.
Кроме того, рассмотрите возможность использования переименования таблиц, а не удаления / создания, чтобы новое представление можно было построить и установить на место почти без перерыва в недоступности. Сначала создайте новую таблицу mview_new, затем переименуйте mview в mview_old (или отбросьте ее) и переименуйте mview_new в mview. В приведенном выше примере ваше представление будет недоступно, пока выполняется заполнение SQL.