Индексированное представление SQL Server, сопоставление представлений с объединениями не работает - PullRequest
3 голосов
/ 22 мая 2010

Кто-нибудь знает, когда 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: Рассматривая эти 2 года после того, как вопрос был создан мной, я не думаю, что мой вывод был правильным. Сопоставление материализованных представлений - очень хрупкий процесс без каких-либо четких правил, которые я мог бы найти за эти годы.

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

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

1 Ответ

2 голосов
/ 22 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...