Как создать представление MySQL с текущей информацией - PullRequest
1 голос
/ 31 марта 2011

Я хочу создать представление текущей информации как таковое:

CREATE VIEW activeProducts AS SELECT * FROM products WHERE isActive = 1

Приведенный выше оператор создает снимок запроса:

SELECT * FROM products WHERE isActive = 1

Так что, если я изменю состояниелюбой элемент в таблице «продукты» после выполнения этого запроса не отображается в представлении.Я понимаю, что это функция CREATE VIEW в MySQL, есть ли переключатель или команда, которые я должен использовать для просмотра или фильтрации текущей информации?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

То, что вы ищете, называется материализованным представлением .

MySQL не поддерживает изначально материализованные представления.самое простое и понятное (если плохо работает) использует CREATE TABLE ... AS SELECT ... вместо создания представления.Это дублирует данные и может быть довольно медленным, если их много.Кроме того, я не верю, что он создает какие-либо индексы, поэтому вам, возможно, придется немного почистить потом.

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

То, что вы хотите, - это «материализованное представление», которое также называется снимком.

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

create table if not exists snapshot_table like regular_table;
begin; 
  delete from snapshot_table; 
  insert into snapshot_table select * from regular_table where isActive = 1;
commit;

При этом, если таблица большая или вы хотите использовать объединения или агрегирование, то обновление представления может быть очень дорогим.

Если вы хотите исследовать «постепенно обновляемые материализованные представления», которые можно быстро обновлять, то прочитайте этот пост .

...