Как реализовать материализованное представление с MySQL? - PullRequest
19 голосов
/ 29 марта 2010

Как реализовать материализованные представления?

Если нет, как я могу реализовать Materialized View с MySQL?

Обновление:

Будет ли работать следующее? Это не происходит в транзакции, это проблема?

DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`;
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`;

Ответы [ 4 ]

30 голосов
/ 06 апреля 2011

Я поддерживаю проект под названием Flexviews (http://github.com/greenlion/swanhart-tools)), который добавляет постепенно обновляемые материализованные представления в MySQL (или быстрое обновление) даже для представлений, использующих объединения и агрегирование. Я работал над этим проектом три года.Включает утилиту сбора данных об изменениях для чтения журналов базы данных. Триггеры не используются.

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

Второй метод - это «быстрое обновление», он даже имеетподдержка агрегации и объединений.

В блоге есть сообщение об этом: http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews значительно более продвинут, чем пример FromDual, на который ссылается astander.

2 голосов
/ 29 марта 2010

Ваш пример приблизительно соответствует материализованному представлению "полное обновление".Вам может потребоваться представление «быстрого обновления», которое часто используется в настройках хранилища данных, если исходные таблицы содержат миллионы или миллиарды строк.

Вы бы приблизили быстрое обновление, используя вместо этого вставку / обновление (upsert)объединение существующей «таблицы представлений» с первичными ключами исходных представлений (при условии, что они могут быть сохранены на ключах) или сохранение даты_ времени последнего обновления и использование этого в критериях обновления SQL для сокращения времени обновления.

Кроме того, рассмотрите возможность использования переименования таблиц, а не удаления / создания, чтобы новое представление можно было создавать и создавать практически без пропусков недоступности.Сначала создайте новую таблицу «mview_new», затем переименуйте «mview» в «mview_old» (или удалите ее) и переименуйте «mview_new» в «mview».В приведенном выше примере ваше представление будет недоступно, пока выполняется заполнение SQL.

0 голосов
/ 15 июня 2018

Этот поток довольно старый, поэтому я попытаюсь немного обновить его:

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

Вот что я до сих пор добивался успеха:

  1. Использование триггеров - вы можете устанавливать триггеры в исходных таблицахна котором вы строите вид.Это сводит к минимуму использование ресурсов, поскольку обновление выполняется только при необходимости.Кроме того, данные в материализованном представлении имеют вид в реальном времени
  2. Использование заданий cron с хранимыми процедурами или сценариями SQL - обновление выполняется на регулярной основе.Вы имеете больше контроля над тем, когда ресурсы используются.Очевидно, что ваши данные являются настолько свежими, насколько позволяет частота обновления.
  3. Использование запланированных событий MySQL - аналогично 2, но выполняется внутри базы данных
  4. Flexviews - с использованием FlexDC, упомянутого Джастином.Ближе всего к реальному материализованному

Я собирал и анализировал эти методы, их плюсы и минусы в своей статье Создание материализованных представлений MySQL

, ожидаядля обратной связи или предложения для других методов создания материализованных представлений в MySQL

0 голосов
/ 07 июня 2013

Согласно документам и комментариям mySQL внизу страницы , создается впечатление, что люди создают представления, а затем создают таблицы из этих представлений. Не уверен, что это решение эквивалентно созданию материализованного представления, но, похоже, это единственный доступный путь в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...