2015-04-28 5 views
0

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

Когда я использую этот запрос данные будут показаны сразу:

CREATE VIEW train_set 
AS SELECT * 
FROM logs where ((logs.timestamp >= '2014-03-01 00:00:00') and (logs.timestamp < '2014-03-16 00:00:00')); 

Но когда я использую этот запрос:

CREATE VIEW train_set 
AS SELECT * 
FROM logs where ((logs.timestamp >= '2014-03-01 00:00:00') and (logs.timestamp < '2014-03-16 00:00:00') and logs.user_id = '10'); 

за каждый раз, когда я хочу, чтобы увидеть содержимое таблицы View : train_set начинает загрузку, как будто он снова выполняет запрос.

Кто-нибудь теперь, почему это так? Я использую Sequel Pro на своем Macbook

ответ

2

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

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

Я не могу представить, почему кто-то хотел бы создать представление, которое выполняется только один раз (при создании). Альтернативно для этого вы можете просто экспортировать свой материал в файл excel. Разве это не было бы так же?

+1

Да, это хороший, я просто экспортирую его в файл excel! Данные внутри базы данных не будут меняться, мне нужно только один раз получить их. Спасибо за это объяснение. – Rotan075

+0

Конечно. Рад, что смог помочь. :) – C4u

0

Ну, как правило, Просмотров Обновлены при выборе. Они не обновляются мгновенно, потому что они приносят все новые строки в таблице «просмотра», когда вы активируете триггер (выберите или что-нибудь еще).

Давайте начнем с другой концепции, которая поможет «Материализованные виды». Mysql по умолчанию не может использовать эту функцию без какой-либо ручной работы.

Прежде всего, материализованный вид представляет собой «сохраненный вид» (с технической точки зрения это не так, но для объяснения, это так). Итак, что вам нужно делать?

Создать новую таблицу под названием «train_set_mv»,

CREATE TABLE TRAIN_SET_MV AS SELECT * FROM LOGS 

(Простой способ сделать изображение, создать все индексы в производительности, так как речь идет о журнале)

Теперь создать триггер в Ваша базовая таблица после INSERT, DELETE, UPDATE и т.д., как следующее:

DELIMITER | 
CREATE TRIGGER trig_logs AFTER INSERT ON logs 
    FOR EACH ROW BEGIN 
     INSERT INTO train_set_mv 
     SELECT fields 
     FROM logs log WHERE LOG.ID = NEW.ID; 
    END; 

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

Смежные вопросы