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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 146 147 148 149 150 151 < 152 > 153 154 155 156 157 158 .. 161 >> Следующая


Пример в этом приложении описывает достаточно сложный запрос, чтобы проиллюстрировать основные вопросы, постоянно возникающие в ходе работы, и в то же время содержит несколько ошибок, требующих исправления. Представьте, что следующий запрос был предложен для приложения, разработанного для работы под Oracle, DB2 и SQL Server, а вас попросили вынести решение относительно его оптимальности в этих базах данных и, если необходимо, предложить изменения:

SELECT C.Phone_Number. С.Honorific. C.FirstJIame. С.LastJ1Jame. С.Suffix.

C.Address_ID. A.Address_ID. A.Street_Addr_Linel. A.Street_Addr Line2.

A.City_Name. A.State_Abbreviation. A.ZIPCode. OD.Deferred_Ship_Date.

OD. Item Count. P. Prod_Descri pti on. S. Shi pment_Date

FROM Orders 0. Order_Details 0D. Products P. Customers C. Shipments S.

Addresses A

WHERE 0D.OrderJD = 0.OrderJD AND 0.CustomerJD = C.Customer ID AND 0D.ProductJD = P.ProductJD AND 0D.Shipment ID = S.ShipmentJD AND S.AddressJD = A.AddressJD AND C.PhoneJJumber = 6505551212 AND 0.BusinessJJnitJD = 10

ORDER BY C.CustomerJD. 0.OrderJD Desc. S.ShipmentJD. 0D.0rder_Detail_ID:

Сокращение запроса до диаграммы запроса

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

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

В начальной точке поместите любой псевдоним в центр диаграммы. Чтобы было удобнее рисовать, я начну с узла 0. Нарисуйте стрелки вниз от этого узла ко всем
Сокращение запроса до диаграммы запроса

311

узлам, с которыми 0 соединяется через их первичные ключи (они называются так же, как и таблицы, но «s» на конце заменена на « ID»). Нарисуйте указывающие вниз ведущие к 0 стрелки от всех псевдонимов, участвующих в соединениях с 0 по первичному ключу таблицы Orders, Order_ID. Начало скелета запроса должно выглядеть как на рис. Б.1.

OD

T

О

T

с

Рис. Б.1. Начало скелета запроса

Теперь сместим фокус внимания на OD. Найдите соединения от этого узла и добавьте соответствующие связи на скелет соединений. Результат должен выглядеть как на рис. Б.2.

OD

SPO

с

Рис. Б.2. Промежуточное состояние скелета запроса

Найдите условия соединения, еще не указанные на диаграмме. Единственное оставшееся условие — S.Address_ID = A.Address_ID, поэтому нужно добавить связь для этого соединения, чтобы завершить скелет запроса, как показано на рис. Б.З.

OD

SPO

T Y

А С

Рис. Б.З. Полный скелет запроса
312

Приложение Б. Полный и непрерывный процесс

Создание упрощенной диаграммы запроса

Чтобы создать упрощенную диаграмму запроса, найдите самый селективный фильтр и обозначьте его подчеркнутой буквой F рядом с фильтрованным узлом. Условие по телефонному номеру покупателя практически однозначно будет самым селективным фильтром. Добавьте строчную подчеркнутую букву f для единственного оставшегося фильтра, намного менее селективного условия по Busi ness_Uni t_ID для Orders. Результат, показанный на рис. Б.4, — это упрощенная диаграмма запроса.

OD

SPOf

Y Y

А CF

Рис. Б.4. Упрощенная диаграмма запроса

Создание полной диаграммы запроса

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

Ql: SELECT SUMC COUNT< Phone_Number)*COUNT(Phone_Number))/

(SUM(COUNT(Phone_Number))*SUM(COUNT(*))) Al FROM Customers GROUP BY Phone Number;

Al: 0.000003

Q2: SELECT C0UNT(*) A2 FROM Customers:

A2: 500 000

Q3: SELECT SUM(C0UNT(Bus1ness_Un1t ID)*C0UNT(Bus1ness Un1t_ID))/

(SUM(C0UNT(Bus1 nessJnTtJD) )*SUM(C0UNT(*I)) A3 FROM Orders

GROUP BY Bus1ness_Un1t 10:

A3: 0.2

Q4: SELECT C0UNT(*) A4 FROM Orders:

A4: 400 000

Q5: SELECT C0UNT(*) A5

FROM Orders 0, Customers C WHERE 0.Customer_ID - C.Customer_ID:

A5: 400 000

Q6: SELECT C0UNT(*) A6 FROM 0rder_Deta1ls:
Сокращение запроса до диаграммы запроса

313

Аб: 1 200 ООО

Q7: SELECT C0UNT(*) А7

FROM Orders 0. Order_Details OD WHERE DD.0rder_ID = 0.0rder_ID:

A7: I 2000 000

Q8: SELECT COUNTt*) A8 FROM Shipments:

A8: 540 000

09: SELECT C0UNT(*) A9

FROM Shipments S, OrderJJetails OD WHERE OD.ShipmentJD = S. Shipment JD;

A9: I 080 000

QlO: SELECT C0UNT(*) AlO FROM Products:

AlO: 12 000

Qll: SELECT C0UNT(*) All

FROM Products P. Order_DetaiIs OD WHERE OD.Product ID = P.Product_ID:

AU: I 200 000

Q12: SELECT COUNTC*) A12 FROM Addresses;

A12: 135 000

Q13: SELECT C0UNT(*) A13

FROM Addresses A, Shipments S WHERE S.AddressJD = A.AddressJD:

A13: 540 000

ПРИМЕЧАНИЕ---------------------------------------------------------------------------------------------
Предыдущая << 1 .. 146 147 148 149 150 151 < 152 > 153 154 155 156 157 158 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100