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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 85 86 87 88 89 90 < 91 > 92 93 94 95 96 97 .. 161 >> Следующая


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

Запись (D2, В2) в конце порядка соединения указывает, что порядок двух последних узлов He играет роли.

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

Коэффициенты соединения, меньшие IfO

Если детальный или главный коэффициент соединения меньше 1,0, то это соединение фактически в среднем принадлежит к виду «[некоторое число] к [меньше, чем 1,0]». Может ли сторона «меньше, чем 1,0» этого соединения принадлежать виду «ко многим» — для проблемы оптимизации несущественно, если вы уверены, что текущее среднее количество связанных данных не должно сильно измениться для других экземпляров баз данных. Если соединение вниз с обычным главным коэффициентом соединения, равным 1,0, предпочтительней, чем соединение вверх вида «ко многим», то соединение в любом направлении с коэффициентом, меньшим 1,0, является более предпочтительным. Эти коэффициенты соединения, меньшие 1,0, в каком-то смысле являются скрытыми фильтрами, которые при выполнении соединения отбрасывают строки так же эффективно, как и явные одноузловые фильтры, и поэтому влияют на оптимальный порядок соединения так же, как фильтры.

Правила для коэффициентов соединения, меньших 1,0

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

183

¦ При выборе ведущего узла все узлы на фильтрованной стороне соединения наследуют дополнительные преимущества скрытого фильтра соединения. Например, если меньший 1,0 коэффициент соединения — это J, а коэффициент фильтрации узла равен R, при выборе наилучшего узла берите значение J ? R. При сравнении узлов на одной стороне фильтра соединения это не будет иметь никакого эффекта, но у узлов на фильтрованной стороне соединения будет преимущество перед узлами на стороне, не имеющей фильтра.

¦ Выбирая следующий узел в последовательности, считайте все соединения с коэффициентом соединения J (меньшим 1,0) соединениями вниз. При сравнении узлов используйте эффективный коэффициент фильтрации J X R, где R — это коэффициент фильтрации одного узла, обращение к которому идет через это фильтрующее соединение.

¦ Однако для главных коэффициентов соединения, меньших 1,0, рассмотрите, не будет ли лучше сделать скрытый фильтр явным фильтром вида «внешний ключ не равен null». Превращение «не null» фильтра в явный позволяет детальной таблице, находящейся прямо над фильтрующим главным соединением, также наследовать селективность J х R во время выбора ведущей таблицы и порядка соединения сверху. Подробнее об этом правиле — в следующих разделах.

Детальные коэффициенты соединения, меньшие 1,0

Значение небольших коэффициентов соединения оказывается различным в зависимости от того, является ли коэффициент главным или детальным, меньшим 1,0. Детальный коэффициент соединения, меньший 1,0, означает, что когда отсутствие деталей определенного типа вообще более вероятно, чем наличие нескольких, вероятность появления нескольких деталей все же существует. Например, у вас может быть таблица Employees, связанная с таблицей Loans для отслеживания займов, которые компания делает нескольким менеджерам верхнего звена в качестве вознаграждения. Дизайн базы данных должен разрешать нескольким сотрудникам иметь несколько займов, но у гораздо большего количества сотрудников вообще не будет займов от компании, поэтому детальный коэффициент соединения будет близок к 0. Для обеспечения ссылочной целостности столбец Empl oyee_ID таблицы Loans должен указывать на реального сотрудника. Это его единственное предназначение, и все займы в этой таблице будут относиться только к сотрудникам. Однако нет никакой необходимости, чтобы Empl oyee_ID соответствовал какому-либо займу. Столбец Employee_ID таблицы Employees существует (как и любой первичный ключ) только для того, чтобы указывать на собственную строку, а не на строки в другой таблице, поэтому не удивительно, что соединение не может найти соответствия по направлению вверх, от первичного ключа ко внешнему.

Так как обработка детальных коэффициентов соединения, меньших 1,0, оказывается делом простым, хотя и редко встречающимся, я проиллюстрирую этот случай. Проработаем пример из предыдущего абзаца, чтобы попытаться сделать новые правила более убедительными. Начнем с запроса, который присоединяет Empl oyees к Loans, и добавим соединение с Departments с фильтром, который отбрасывает по-
184

6. Выбор наилучшего плана выполнения

ловину отделов. Результат показан на рис. 6.19, где каждый узел обозначен первой буквой имени соответствующей таблицы.

Ll1O

0.01

Tl

E

100

Tl

D 0J5

Рис. 6.19. Простой пример с фильтрующим соединением ПРИМЕЧАНИЕ ------------------------------------------------------------------------------------
Предыдущая << 1 .. 85 86 87 88 89 90 < 91 > 92 93 94 95 96 97 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100