Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00
Лекция 18:

Создание и использование представлений

Создание представления

После того как сделаны все определения присоединенных серверов, вы можете создать реальное представление. В следующем примере создается представление с именем sales (продажи), в котором объединяются данные по продажам из таблицы sales на четырех серверах:

CREATE VIEW sales 
AS
  	SELECT * FROM /*Server1.bicycle.dbo.*/l_sales  
    		UNION ALL  
      			SELECT * FROM Server2.bicycle.dbo.l_sales 
    		UNION ALL 
      			SELECT * FROM Server3.bicycle.dbo.l_sales 
    		UNION ALL 
      			SELECT * FROM Server4.bicycle.dbo.l_sales 
GO
Индексированные представления

SQL Server 2000 также позволяет вам создать индекс по представлению. Поскольку представление – это просто виртуальная таблица, она имеет ту же общую форму, что и реальная таблица базы данных. Индекс создается с помощью оператора T-SQL CREATE INDEX, который вы уже использовали для создания индекса по таблице. (Этот оператор описан в "Создание и использование индексов" .) Единственным отличием является то, что вместо имени таблицы вы указываете имя представления. Например, следующий оператор T-SQL создает кластеризованный индекс по представлению с именем partview:

CREATE UNIQUE CLUSTERED INDEX partview_cluidx
  	ON partview (part_num ASC) 
  	 WITH FILLFАСTOR=95 
ON partfilegroup

Создание индексов по представлениям имеет несколько факторов влияния на производительность. Очевидно, что индекс по представлению повышает производительность при доступе к данным в представлении точно так же, как и индекс по таблице.

Кроме того, если вы создаете индекс по представлению, SQL Server сохраняет результирующий набор представления в памяти и не обязан "материализовать" его для будущих запросов. Термин "материализовать" относится к процессу, который используется системой SQL Server для динамического слияния данных, необходимого для создания результирующего набора представления каждый раз, когда какой-либо запрос ссылается на представление. (Напомним, что представление – это динамическая структура.) Процесс материализации представления может существенно увеличить дополнительную нагрузку, которая требуется для реализации запроса. Влияние, оказываемое на производительность повторяющейся материализацией представления, может оказаться значительным в случае сложного представления или большого количества данных в представлении.

Кроме того, если вы создаете индекс по представлению, оптимизатор запросов SQL Server автоматически использует индекс в запросах, где нет явного указания имени представления в предложении FROM оператора SELECT. Иными словами, если существующий запрос в приложении или хранимой процедуре может получить преимущества от использования индексированного представления, то оптимизатор запросов будет применять для реализации запроса это индексированное представление.

Эти преимущества не достаются "бесплатно". Индексированные представления могут оказаться со временем слишком сложными, чтобы их мог поддерживать SQL Server. При каждом модифицировании базовой таблицы SQL Server должен модифицировать результирующий набор представления и (потенциально) индекс по этому представлению. А поскольку диапазон значений индекса по представлению может оказаться больше, чем любой индекс по таблице, например, если представление охватывает несколько больших таблиц, то дополнительная нагрузка, связанная с поддержкой представления и его индекса, может свести на нет любые преимущества, получаемые запросами от индексированного представления. Из-за этой дополнительной нагрузки по обслуживанию вам следует создавать индексы только по тем представлениям, для которых преимущества увеличения скорости считывания результатов перевешивают недостатки, связанные с увеличением нагрузки при обслуживании. Обычно следует индексировать представления, базовые данные которых относительно статичны, у которых в результирующем наборе обрабатывается большое количество строк и которые используются большим количеством запросов.

Заключение

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

Вы можете обращаться к представлению в операторах T-SQL таким же образом, как и к таблицам. Представления можно использовать как средство безопасности для скрытия критически важных данных. Они также позволяют осуществлять более простой доступ к данным. И, кроме того, представления позволяют осуществлять логическую презентацию данных. Вы можете также использовать представления для создания виртуальной таблицы из отдельных секций.

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