|
Программирование >> Программирование баз данных
Придание представлению признаков таблицы с помощью опции viewmetadata Применение опции VIEW METADATA приводит к тому, что в клиентских программах DB-LIB, ODBC и OLE-DB представление становится похожим на настоящую таблицу. Если эта опция не используется, то в клиентский АРЬинтерфейс передаются метаданные, которые указывают на то, на какой базовой таблице (таблицах) основано это представление. Предоставление информации о метаданных требуется для обеспечения возможности сделать обновляемыми все клиентские курсоры (курсоры, которыми управляют клиентские приложения). Следует отметить, что если предусмотрена поддержка таких курсоров, то необходимо также предусмотреть применение триггера INSTEAD OF. Индексированные (материализованные) представления в версии SQ*L Server 2000 возможность использования индексированных представлений предусматривалась только в варианте Enterprise Edition (несомненно, они поддерживались также в Developer Edition и Evaluation Edition, но применение этих вариантов программного обеспечения SQL Server, предназначенных для разработки и опробования кода, не допускалось в системах производственного назначения). Но после выпуска программы SQL Server 2005 индексированные представления поддерживаются во всех версиях. Если представление используется в запросе, то код определения представления встраивается в код вызывающего запроса. К сожалению, это означает, что значительно усложняется код вызывающего запроса. Фактически дополнительные издержки, связанные с тем, что в СУБД приходится динамически анализировать действия, предусмотренные в представлении (и определять, на какие данные распространяются эти действия), могут становиться весьма значительными. Более того, часто обнаруживается, что операции соединения таблиц, предусмотренные в определении представления, вызывают необходимость выполнения дополнительных операций соединения таблиц в запросе. Индексированные представления позволяют устранять причины этих недостатков заранее, еще до вызова запроса на выполнение. Индексированное представление- это такое представление, к которому относится набор уникальных значений, материализованный в форме кластеризованного индекса. Преимущество использования индексированных представлений состоит в том, что они обеспечивают очень быстрый поиск благодаря тому, что информация, лежащая в основе представления, уже собрана заранее. После создания на представлении первого индекса (который должен представлять собой кластеризованный индекс, сформированный на уникальном наборе значений) для СУБД SQL Server появляется также возможность создавать на этом представлении дополнительные индексы; при этом в качестве справочной информации используется кластеризованный 1слюч из первого индекса. Несмотря на то что эти возможности весьма привлекательны, за них также приходится платить, поскольку при рассмотрении возможности создания индексов на представлениях необходимо учитывать некоторые требования, перечисленные ниже (список этих требований довольно велик). Представление должно быть создано с использованием опции SCHEMABINDING. Если в представлении имеется ссылка на какие-либо пользовательские функции (дополнительная информация на эту тему приведена ниже), то эти функции также должны быть связанными со схемой. Представление не должно ссылаться на какие-либо другие представления; допускается использование только ссылок на таблицы и пользовательские функции. Имена всех таблиц и пользовательских функций, на которые имеется ссылка в представлении, должны быть основаны на применении соглашения об именовании, предусматривающего двухкомпонентную структуру имен, например dbo. Customers, BillyBob. SomeUDF (не допускаются даже обычные трех-и четырехкомпонентные имена); кроме того, эти объекты должны иметь того же владельца, что и представление. Определение представления должно находиться в той же базе данных, что и все объекты, на которые имеется ссылка в представлении. Ко времени создания всех основополагающих таблиц самого представления опциям ANSI NULLS и QUOTED IDENTIFIER должно быть присвоено значение on (с помощью команды SET). Все функции, на которые ссылается представление, должны быть детерминированными. Прежде чем приступить к рассмотрению примера создания индексированного представления, еще раз вернемся к объекту CustomerOrders vw, который был создан в одном из предыдущих разделов настоящей главы. В этом примере демонстрируется применение оператора ALTER, который уже рассматривался в разделе, посвященном шифрованию, но фактически с таким же успехом можно было использовать оригиналыг версию представления, приведенную в самом начале главы, при условии правильного включения в эту версию опции WITH SCHEMABINDING. ALTER VIEW CustomerOrders vw WITH SCHEMABINDING SELECT о.SalesOrderlD, о.OrderDate, od.ProductID, p.Name, od.OrderQty, od.UnitPrice, od.LineTotal FROM Sales.SalesOrderHeader AS о JOIN Sales.SalesOrderDetail AS od ON o.SalesOrderlD = od.SalesOrderlD JOIN Production.Product AS p ON od.ProductID = p.ProductID Ниже описаны некоторые важные особенности приведенного здесь оператора. Представление создается с опцией SCHEMABINDING. Чтобы иметь возможность использовать опцию SCHEMMINDING, необходимо предусмотреть структуру именования, состоящую из двух частей (в данном случае такая структура именования должна применяться для обозначения всех таблиц) для всех объектов, на которые мы ссылаемся (в данном примере это требование соблюдается, но не все представления, с которыми приходится сталкиваться на практике, учитывают такую необходимость). Но фаю-ически выполнение этого оператора представляет собой лишь первый шаг, посколысу он еще не приводит к созданию индексированного представления. Вместо этого было получено представление, которое может быть индексировано. А когда мы приступим к созданию индексов, необходимо учитывать, что первый индекс, созданный на представлении, должен быть одновременно и кластеризованным, и уникальным: CREATE UNIQUE CLUSTERED INDEX ivCustomerOrders ON CustomerOrders vw(SalesOrderlD, ProductID, Name) После вызова на выполнение этого оператора представление становится кластеризованным. Но к этому моменту появляется небольшая проблема, которая вскоре станет очевидной. Проверим полученное представление, применив к нему простой оператор SELECT: SELECT * FROM CustomerOrders vw После вызова этого представления на выполнение обнаруживается, что в графическом плане выполнения имеются сведения о том, что новый индекс используется, как показано на рис. 9.1 (чтобы вывести на экран графическое изображение плана выполнения, можно щелкнуть на кнопке, обозначенной всплывающей подсказкой Estimated Execution Plan, которая находится вблизи от центральной части панели инструментов; команду вызова на экран окна с изображением плана выполнения можно также найти в меню Query=>Display Estimated Execution Plan). Query 1: Query cot (rrelative to the batch): 100 SELECT * FROM CuatonaeEOEdets vw Compute Scales Cost: 1 * Cluster d Index Scan Cost: 99 t CUietered Indn Scan Scanning a clitstered index ertirety or only a range,
Object [AdventureWorks],[dbo], [CustoRierOrdersvw]. [ivCustomerOrders] Output List [AdventureWorks] .[dbo], [CustorrerOrders vw}.5dlesOrderIDjtAdvenl:ure Works], [dbo},[Cu£tor[ierOrders vwJ.aderDdte, :].[dbo]. OjstorrerOrders vw],ProductID, [AdventureVAtorks]. dbo}.[CiJrtomerOrders w],rflne, [AdvntureWorj, dbo].[CustomerOrder5 vw] .OrderQty, Ad varitLre Works] .[dbo], OjstomerOrder; viv].Li tPrice, [AdverttreWorks], dbo].[CustomerOrders vw],tineTot Puc. 9.1. Графическое изображение плана выполнения Индекс, поддерживающий индексированное представление, может использоваться в СУБД SQL Server, даже если само представление явно не упоминается в каком-либо операторе. Например, если выполняется операция соединения, подобная той, индекс которой поддерживается для представления, то СУБД SQL Server может распознать эту ситуацию и предусмотреть использование индекса.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |