Индексированное представление SQL Server, сопоставление представлений с объединениями не работает

Кто-нибудь знает, когда SQL Server 2008 R2 может автоматически сопоставлять индексированные представления (также известные как материализованные представления), которые содержат присоединения к запросу?

Например, вид

select dbo.Orders.Date, dbo.OrderDetails.ProductID
from dbo.OrderDetails
join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID

Невозможно автоматически сопоставить один и тот же точный запрос. Когда я выбираю прямо из этого представления with (noexpand) Я на самом деле получаю гораздо более быстрый план запросов, который выполняет сканирование кластерного индекса индексированного представления. Могу ли я заставить SQL Server выполнить это сопоставление автоматически? У меня довольно много запросов и представлений, и я не хочу каждый раз ссылаться на индексированное представление вручную, потому что я использую OR mapper.

Я нахожусь на корпоративной редакции SQL Server 2008 R2.

Изменить: я нашел решение. SQL Server 2008 R2 не сопоставляет индексированные представления с более чем двумя объединениями автоматически. Возможно, это слишком сильно замедлит процесс оптимизации.

Редактировать 2: Пересматривая это через 2 года после того, как вопрос был создан мной, я не думаю, что мой вывод был правильным. Сопоставление материализованных представлений - очень хрупкий процесс без каких-либо четких правил, которые я мог бы найти за эти годы.

Конечно, роль играют следующие:

  • Количество соединений
  • Наличие предиката
  • Порядок соединения, как в представлении, так и в запросе

1 ответ

Решение

Я немного не совсем понимаю, в чем именно твой вопрос; но я думаю, что это даст вам то, что вы хотите:

http://msdn.microsoft.com/en-us/library/ms181151.aspx

Существует множество странных, произвольно выглядящих условий, которые ограничивают использование SQL Server индекса представления в запросе. Эта страница документирует их для SQL Server 2008.

Другие вопросы по тегам