Что происходит, когда я создаю индекс для представления? Есть ли какие-то преимущества по сравнению с использованием таблицы с индексами? - PullRequest
1 голос
/ 15 июня 2010

Из того, что я понимаю, данные будут "сохранены" (физически сохранены, а не просто извлечены, когда мне это нужно). Это правильно?

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

Ответы [ 4 ]

2 голосов
/ 15 июня 2010

Мы используем индексированные представления для «предварительного СОЕДИНЕНИЯ» нескольких часто используемых таблиц, которые используются во многих местах.

Они также полезны для реализации отфильтрованных индексов до SQL Server 2008

Однако в MSDN есть статья о них: « Повышение производительности с помощью индексированных представлений SQL Server 2005 » (первый удар по Google BTW)

2 голосов
/ 15 июня 2010

Индексированные представления могут повысить производительность запросов следующими способами:

  • Агрегации могут быть предварительно вычислены и сохранены в индексе, чтобы минимизировать дорогостоящие вычисления во время выполнения запроса.
  • Таблицы могут быть объединены, и результирующий набор данных может быть сохранен.
  • Комбинации объединений или агрегатов могут быть сохранены.

Повышение производительности с помощью индексированных представлений SQL Server 2005

1 голос
/ 15 июня 2010

Вы пытаетесь сравнить индексированное представление и, скажем, просто другую таблицу.

Если вы хотите, чтобы эта другая таблица всегда была совместима с другими таблицами в системе (т. Е. С таблицами, на которые ссылается индексированное представление), вам придется написать ряд триггеров для этих других таблиц, чтобы Работа. И если представление является достаточно сложным (несколько базовых таблиц, сложное предложение или агрегаты), эти триггеры могут быть сложными для написания и получения правильных значений.

Но вам не нужно выполнять эту работу, потому что он уже встроен в SQL-сервер в виде индексированных представлений - просто представьте, что SQL-сервер автоматически записывает все эти триггеры и получает все правильно с первого раза.

0 голосов
/ 15 июня 2010

Давайте сначала посмотрим на вещи с действительно высокого уровня. Отношение - это отображение между кортежами и логическими значениями (обычно true, false и null, но теоретически их может быть гораздо больше).

Отношение отец / сын отображает кортеж формы (человек, человек) в набор {true, false, null}.

Таким образом, в идеальном мире вы могли бы спросить всезнающую сущность (то есть оракула) о любой паре отец / сын и получить ответ да / нет / *. 1005 *

Теперь компьютер, очевидно, не может обыскать все пространство всех возможных пар отца и сына. Вы должны сказать, с чего начать поиск и как далеко искать, прежде чем он сдастся. Вот что такое «стол». Мы традиционно думаем о таблицах как о наборах, но на самом деле мы должны думать о них более явно как о границах пространства поиска.

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

Теперь, когда вы пишете запрос, который объединяет таблицы T_1, T_2, T_3 ..., T_n, оптимизатор запросов пытается расположить их так, чтобы он сначала рассматривал таблицы с наименьшим пространством поиска. Кроме того, окончательный набор результатов будет индексируемым (т. Е. Пространство поиска будет сокращаемым), а не составляющими таблицами (например, вы можете объединять строки в операторе select)

Когда вы «индексируете» представление, все, что вы делаете, говорит SQL Server запомнить структуру индекса в представлении, чтобы в будущем он мог использовать его в каком-то другом аналогичном Специальный запрос, который вы создаете.

Например, в рамках большого сложного запроса (BCQ) вы можете объединять строки в столбцах c1 и c2. Обычно это довольно большое пространство поиска, но с индексированным представлением оптимизатор запросов понял бы, что у него уже есть индекс в пространстве объектов, имеющих форму c1 + c2. Кроме того, оптимизатор запросов может уменьшить BCQ до одного или двух (или трех или ...).

...