Почему вы хотите поместить индекс в представление?
Microsoft SQL Server позволяет вам добавить индекс в представление, но зачем вы хотите это сделать?
Мое понимание заключается в том, что представление на самом деле является просто подзапросом, то есть, если я говорю SELECT * FROM myView, я действительно говорю SELECT * FROM (myView Query)
Похоже, что индексы на базовых таблицах будут самыми важными. Итак, для чего вам нужен отдельный индекс в представлении?
Ответы
Ответ 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, к сожалению, не позволяет создавать ограничения в представлениях.