Программирование >>  Полное сканирование таблицы 

1 ... 97 98 99 [ 100 ] 101 102 103 ... 107


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

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

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

SELECT C.PhcneJumber. С.Honorific. C.First Name. C.Last Nanie. C.Suffix. C.Address ID. A.Address ID. A.Street Addr Linel. A.Street Addr L1ne2. A.City Nanie. A.State Abbrev1ation. A.ZIPCode. OD.Deferred Ship Date. OD. ItemCount. P. Prod Descri pti on. S. Shi pment Date FROM Orders 0. Order Details 00. Products P. Customers C. Shipments S. Addresses A

WHERE OD.Order ID = 0.OrderJD AND O.Customer ID = C.CustomerJD AND OD.Product ID = P.Product ID AND 00.Shipment ID = S.Shipment ID AND S.Address ID = A.Address ID AND C.Phone Number = 6505551212 AND O.Business Unit ID = 10

ORDER BY C.Customer ID. O.Order ID Desc. S.Shipment ID. OD.Order Detail ID:

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

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

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

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



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

> f С

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

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


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

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


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




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

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

1 г Of

А CF

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

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

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

Q1: SELECT SUM(COUNT(Phone Number)*COUNT(Phone Number))/ (SUM(COUNT(Phone Number))*SUM(COUNTC*))) Al

FROM Customers

GROUP BY Phone Number: Al: 0,000003

02: SELECT COUNTC*) A2 FROM Customers: A2: 500 ООО

03: SELECT SUM(C0UNT(Bus1ness Un1t ID)*C0UNT(Bus1ness Un1t ID))/ (SUM(C0UNT(Bus1ness UnTt ID))*SUM(COUNT(*T)) A3 FROM Orders

GROUP BY Bus1ness Un1t ID: A3: 0,2

Q4: SELECT COUNTC*) A4 FROM Orders: A4: 400 ООО

05: SELECT COUNTC*) A5

FROM Orders 0, Customers С

WHERE O.Customer ID - C.CustomerJD; A5: 400 ООО

06: SELECT COUNTC*) A6 FROM Order Details:



1 ... 97 98 99 [ 100 ] 101 102 103 ... 107

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика