Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 120

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 114 115 116 117 118 119 < 120 > 121 122 123 124 125 126 .. 161 >> Следующая


Рис. 7.33. Диаграммы запросов для определяющих представления запросов

Вот как выглядит запрос, использующий представление:

SELECT 0V.Customer_Main_Phone. С.Honorific. 0V.Customer_First_Name.

0V.Customer_Last_Name. С.Suffix. 0V.Customer_Address_ID.

SV.Shi pment_Address_ID. SV.Shi pment_Street_Address_Li nel.

SV.Shi pment_Street_Address_Li ne2. SV.Shi pment_Ci ty_Name.

SV.Shipment_State. SV.Shipment_Zip, DD.DeferredJ>hipment JDate.

0D.Item_Count. ODT.Text. P.ProductJDescription. SV.ShipmentJDate FROM RecentJDrderJf DV. OrderJDetails DD, Products P. ShipmentJf SV.

CodeJYanslations ODT. Customers C WHERE UPPER(0V.CustomerJ_astJlame) LIKE :last_name||'%'

AND UPPER(OV.Customer_First_Name) LIKE :fіrst_name11'%'

AND OD.OrderJD = DV.OrderJD AND OV.CustomerJD = C.CustomerJD AND DD.ProductJD = P.ProductJD(+)

AND OD.ShipmentJD = SV.Shipment_ID(+)

AND DD.StatusJbde = ODT.Code

AND ODT.CodeJype = 'ORDERJDETAIL_STATUS'

ORDER BY OV.CustomerJD. DV.OrderJD Desc. SV.ShipmentJD, OD.OrderJDetailJD

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

Заменим все узлы представлений на рис. 7.34 диаграммами запросов, определяющих представления, с рис. 7.33. А скелеты этих запросов обведем пунктирной кривой, чтобы обозначить границы представлений. Присоединим скелеты определяющих представления запросов к оставшейся части полной диаграммы запроса к подходящим узлам, в зависимости от того, какая таблица из определения представления содержит ключ соединения. Обычно любые соединения с представлением сверху связаны с корневой детальной таблицей определяющего представле-

Запрос, определяющий представление, ShipmenM/

Запрос, определяющий представление, Order V
244

7. Диаграммное изображение и настройка сложных SQL-запросов

ние запроса. Однако узлы, представляющие главные таблицы, находящиеся под представлением (например, узел С на рис. 7.34), могут быть присоединены к любому узлу скелета определения представления, в зависимости от того, какая таблица содержит внешний ключ, указывающий на этот главный узел. Добавим явные числовые коэффициенты фильтрации ко всем узлам в скелете запроса, имеющим фильтры — как в запросе, определяющем представление, так и в запросе, использующем его. На рис. 7.34 коэффициент фильтрации 0,3 рядом с узлом 0 появляется благодаря фильтру в определяющем представление запросе, а коэффициент фильтрации 0,0002 рядом с узлом С — благодаря условиям на имя и фамилию покупателей в использующем представление запросе.

OD

1

''SV'. P (OV11F ODT

ч 7 ч /—

Ir

с

Рис. 7.34. Нерасширенная диаграмма запроса, использующего представление

Результат должен выглядеть как на рис. 7.35. Там я добавил звездочку к левому узлу С, чтобы указать на различие между узлами, имеющими одинаковые имена И снова я использовал ту же статистику для фильтра по имени покупателя, что и в схожем примере на рис. 5.5, чтобы получить коэффициент фильтрации 0,0002 рядом с С внутри правого скелета представления.

OD

\а / с* \с 0.0002 от;

Рис. 7.35. Расширенная диаграмма запроса, использующего представление

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

Настройка запросов с представлениями

Обычно оптимальный план исполнения для запроса, использующего представления — это план, который бы вы составили для соответствующей диаграммы запроса к простым таблицам. Однако вам придется решить четыре проблемы.
Запросы с представлениями

245

¦ Некоторые соединения со сложными представлениями трудно представить как простые соединения с простыми таблицами. В частности, внешние соединения с представлениями, в которых есть соединения в запросах, определяющих представления, сложно выражать, используя простые соединения. Эта проблема касается нашего примера, поэтому я рассмотрю ее подробнее в следующем разделе «Внешние соединения с представлениями».

¦ Некоторые представления используют в точности те же строки той же таблицы, что и другая таблица в запросе, использующем представления, что создает излишнюю работу для базы данных, которую вам придется устранить. Это происходит с узлами С* и С на рис. 7.35, поэтому данная проблема будет рассматриваться позднее.

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

¦ Узлы внутри определяющих представления запросов и соединения с ними часто оказываются ненужными для получения результата, необходимого в использующем представления запросе.
Предыдущая << 1 .. 114 115 116 117 118 119 < 120 > 121 122 123 124 125 126 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100