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

Почему вы хотите поместить индекс в представление?

Microsoft SQL Server позволяет вам добавить индекс в представление, но зачем вы хотите это сделать?

Мое понимание заключается в том, что представление на самом деле является просто подзапросом, то есть, если я говорю SELECT * FROM myView, я действительно говорю SELECT * FROM (myView Query)

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

4b9b3361

Ответ 1

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

По сути, механизм базы данных поддерживает "решенную" версию запроса (или, скорее, индекс запроса) при обновлении базовых таблиц, а затем, когда это возможно, используя эту решенную версию, а не исходные таблицы.

Вот хороший article в журнале базы данных.

Ответ 2

Microsoft SQL Server позволяет вам добавить индекс в представление, но зачем вы хотите это сделать?

Чтобы ускорить выполнение запросов.

Мое понимание заключается в том, что представление на самом деле является просто подзапросом, то есть, если я говорю SELECT * FROM myView, я действительно говорю SELECT * FROM (myView Query)

Не всегда.

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

Не все представления могут быть проиндексированы.

Например, если вы используете GROUP BY в представлении, чтобы он был индексируемым, он должен содержать COUNT_BIG, и все его агрегатные функции должны распределяться по UNION ALL (только SUM и COUNT_BIG на самом деле). Это необходимо для того, чтобы индекс поддерживался, а обновление базовых таблиц могло своевременно обновлять представление.

Ответ 3

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

http://technet.microsoft.com/en-us/library/cc917715.aspx

Ответ 4

Вы создаете индекс в представлении по той же причине, что и в базовой таблице: для повышения производительности запросов к этому представлению. Другая причина для этого - реализовать некоторое ограничение уникальности, которое невозможно реализовать против базовых таблиц. SQL Server, к сожалению, не позволяет создавать ограничения в представлениях.