Подтвердить что ты не робот

Почему индексированные представления не имеют агрегат MAX()?

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

Я ЗНАЮ, что им запрещено, я просто не понимаю, почему!!! Count и т.д. Разрешено почему не MIN/MAX, я ищу объяснения...

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

id = row_number() over (order by col1, col2)