Я не могу говорить за все базы данных, но в SQL Server вы не можете индексировать представления, если у вас нет версии Enterprise. Неиндексированное представление может быть значительно хуже с точки зрения производительности, чем запрос, особенно если вы пишете запрос к нему, чтобы добавить некоторые условия условия. Индексированные представления обычно могут работать довольно хорошо. Индексированное представление также может относиться к нескольким полям, которые находятся в разных таблицах, и это может ухудшить производительность по сравнению со специальным запросом. (Это может быть не так, при настройке производительности вы всегда должны проверять свои конкретные обстоятельства.)
Одним из замечаний против представлений является то, что они не позволяют выбирать критерии во время выполнения. Так часто вы в конечном итоге получаете представление и запрос.
Представления могут быть более легко поддержаны (просто добавьте эту новую таблицу в объединение, и у всех, кто обращается к финансовым отчетам, она есть), но они намного сложнее настроить производительность. Это отчасти потому, что они имеют тенденцию быть чрезмерно обобщенными и, следовательно, медленнее, чем их аналоги, которые возвращают только необходимый минимум. И да, как сказал Джонатан, вы слишком легко можете объединить представления для отчета в беспорядок, который соединяется с одними и теми же большими таблицами гораздо чаще, чем нужно, и очень медленный.
Два места, где взгляды сияют, хотя:
Убедиться, что сложные отношения всегда правильно описаны. Это одна из причин, почему авторы отчетов склоняются к ним.
Ограничение доступа к подмножеству записей
Существуют также ограничения на тип запросов, которые можно выполнять для представления, а не для специального запроса или хранимого процесса. Например, вы не можете использовать оператор if (или другой код процедурного типа, такой как цикл), или, как отмечено выше, вы не можете предоставить значения времени выполнения для критериев where.
Одно место, где представления часто значительно медленнее, это когда они вызывают другие представления. Базовые представления должны быть полностью реализованы в некоторых базах данных, и, таким образом, вам может понадобиться вызвать 4 459 203 записей, чтобы увидеть 10, которые вам в конечном счете интересны. Начните разбивать это несколько раз, и это может быть очень медленным, очень быстрым; взгляды, которые называют представлениями, просто плохая практика.