Почему индексированные представления не могут иметь агрегат MAX ()? - PullRequest
43 голосов
/ 25 января 2010

Я пробовал несколько просмотров индекса, и я впечатлен, но мне почти всегда нужны также максимум или минута, и я не могу понять, почему это не работает с ними, кто-нибудь может объяснить, почему?

Я ЗНАЮ, что им запрещено, я просто не могу понять, почему !!! Допускается подсчет и т.д., почему не MIN / MAX, я ищу объяснения ...

Ответы [ 3 ]

77 голосов
/ 25 января 2010

Эти агрегаты недопустимы, поскольку они не могут быть пересчитаны исключительно на основе измененных значений.

Некоторые агрегаты, такие как COUNT_BIG() или SUM(), можно пересчитать, просто взглянув на данные, которые изменились. Они разрешены в индексированном представлении, потому что, если базовое значение изменяется, влияние этого изменения можно рассчитать напрямую.

Другие агрегаты, такие как MIN() и MAX(), невозможно пересчитать, просто взглянув на данные, которые изменяются. Если вы удалите значение, которое в данный момент является максимальным или минимальным, то нужно искать новый максимальный или минимальный и находить его в таблице всей .

Тот же принцип применяется к другим агрегатам, таким как AVG() или к стандартным агрегатам вариаций. SQL не может пересчитать их только на основании измененных значений, но ему необходимо повторно просканировать всю таблицу, чтобы получить новое значение.

2 голосов
/ 16 февраля 2012

Помимо причин, указанных Ремусом, практическая потребность в поддержке MIN и MAX меньше. В отличие от COUNT () или SUM (), MAX и MIN быстро рассчитываются - все настроено после одного поиска; вам не нужно читать много данных.

1 голос
/ 25 января 2010

Агрегированные функции, такие как MIN / MAX, не поддерживаются в индексированных представлениях. Вы должны выполнить MIN / MAX в запросе, окружающем представление.

В индексированном представлении есть полное определение того, что разрешено и не разрешено здесь (SQL 2005)
Цитата:

AVG, MAX, MIN, STDEV, STDEVP, VAR, или агрегатные функции VARP. Если AVG (выражение) указывается в запросы, ссылающиеся на индексированное представление, оптимизатор может часто рассчитывать нужный результат, если вид выбрать список содержит СУММ (выражение) и COUNT_BIG (выражение). Например, индексировать представление SELECT список не может содержит выражение AVG (column1). Если список выбора SELECT содержит выражения СУММ (колонка 1) и COUNT_BIG (столбец 1), SQL Server может рассчитать среднее значение для запроса, который ссылается на вид и указывает AVG (column1).

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