Подтвердить что ты не робот

Есть ли способ кэшировать представление, чтобы запросы против него были быстрыми?

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

Я могу ошибаться, но я получаю смысл (со скоростью, с которой выполняется create view и с продолжительности моих запросов против моего представления), что представление фактически выполняется как запрос перед внешним запросом, каждый время, которое я выбираю против него.

Я действительно надеюсь, что я упустил какой-то механизм, когда я запускаю CREATE VIEW, он может выполнить тяжелую работу с запросом на просмотр *, чтобы мой последующий выбор против этого статического представления был бы очень быстрым.

Кстати, я полностью понимаю, что, очевидно, этот VIEW был бы моментальным снимком данных, которые существовали во время создания VIEW, и не отражал бы никакой новой информации, которая была вставлена ​​/обновлена ​​после создания VIEW. Это действительно ТОЧНО, что мне нужно.

ТИА

4b9b3361

Ответ 2

То, о чем вы говорите, это материализованные представления, функция (по крайней мере) DB2, но не MySQL, насколько мне известно.

Есть способы имитировать их, создавая/заполняя таблицу периодически или по требованию, но истинное материализованное представление знает, когда базовые данные изменились, и только пересчитывает, если требуется.

Если данные не будут меняться после создания представления (как вы указываете в комментарии), просто создайте новую таблицу для хранения подмножества данных и запроса. Люди всегда жалуются на медленную скорость, но редко на требования к хранению данных: -)

Ответ 3

Поскольку представление в основном является выражением SELECT, вы можете использовать кеш запросов для повышения производительности.

Но сначала вы должны проверить:

  • вы можете добавлять индексы в соответствующие таблицы для ускорения запроса (используйте EXPLAIN)
  • данные не изменяются очень часто, вы можете материализовать представление (сделать снимки)