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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 68 69 70 71 72 73 < 74 > 75 76 77 78 79 80 .. 161 >> Следующая


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

ПРИМЕЧАНИЕ-----------------------------------------------------------------

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

Итак, вы не нашли соединений с первичным ключом OrderJMails (то есть к 0D. OrderJMa і 1_ID), поэтому все связи с OD указывают вниз на Р, S и 0DT, которые связаны с OD при помощи своих первичных ключей. Так как ShP являются дополнительными таблицами во внешних соединениях, посередине этих связей добавьте указывающие вниз острия стрелок. Вычеркните соединения от 0D, которые представлены этими тремя связями. Теперь осталось только одно соединение — внешнее соединение от S к первичному ключу А. Поэтому следует в последний раз выбрать новую центральную таблицу, на этот раз S, и добавить одну последнюю стрелку, указывающую вниз на А, с острием стрелки посередине, обозначающим это внешнее соединение. Вычеркните последнее соединение. Выбирать новую центральную таблицу не нужно, так как все соединения и псевдонимы уже на диаграмме.

ПРИМЕЧАНИЕ-------------------------------------------------------------------------

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

145

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

OD

SPO ODT

I N

А С ОТ

Рис. 5.4. Скелет запроса

Вычисление коэффициентов фильтрации и соединения

У нас нет условий фильтрации для дополнительных таблиц внешних соединений, поэтому для этих таблиц и соединения нам не нужна статистика. Также вспомните, что обманчивые условия фильтрации OT.Code_Type - 'ORDER_STATUS' и ODT.Code_Type= ' ORDER_DETAIL_STATUS' не осуществляют фильтрацию в чистом виде, а относятся к соединениям с соответствующими таблицами, так как являются частью ключей соединения для доступа к этим таблицам. Таким образом, у нас остаются только условия фильтрации по имени покупателя и дате заказа. Если вы хотите попрактиковаться в методе поиска коэффициентов соединения и фильтрации для диаграммы запроса, то перед тем, как читать дальше, попробуйте написать запросы для получения нужных чисел и формулы вычисления коэффициентов.

Селективность условий по именам и фамилиям зависит от длины соответствующих шаблонов. Подсчитайте селективность, предполагая, что параметры : Last_Name и :First_Name обычно привязываются к первым трем буквам каждого имени, и что пользователи производят поиск по распространенным трехбуквенным строкам (а это действительно так для реальных имен) пропорционально намного чаще, чем по редко встречающимся. Так как это пример для Oracle, используйте выражение Oracle SUBSTR(Char_Col ,1,3) для возвращения первых трех символов значений из каждого из этих символьных столбцов.

Вспомните, что для таблицы «с яблоками и апельсинами» Code_Trans I ati ons вам нужно собрать статистику только по определенным типам, как если бы каждый тип хранился в собственной отдельной физической таблице. Другими словами, если ваш запрос использует коды состояния заказа в некоторых условиях соединения, то следует запросить из Code_Transl ati ons не общее количество строк в этой таблице, а количество строк для состояния заказа. Оказывается, только строки таблицы для типов, участвующих в запросе, значительно влияют на стоимость запроса. Возможно, вам придется опрашивать одну таблицу дважды, но для различных подна-боров этой таблицы. Пример 5.3 опрашивает Code_Transl ati ons один раз, чтобы под-
146

5. Диаграммное изображение простых запросов SQL

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

Пример 5.3. Запросы статистики для настройки запроса

Ql: SELECT SUMCCOUNT(*)*CmNT(*))/(SUM(COUm*))*SUM(COUNTC*))) Al FROM Customers
Предыдущая << 1 .. 68 69 70 71 72 73 < 74 > 75 76 77 78 79 80 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100