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

 

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

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

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


однострочных операций

ВНИМАНИЕ ------------------------------------------------------------------------------

Обычно можно предположить, что любая данная часть строк главной таблицы будет соединяться с практически такой же по размерам частью строк детальной таблицы. Для таблиц транзакций, таких, как Orders и Order_Details, это хорошее предположение. Однако небольшие таблицы часто предназначены для хранения типов или состояний, а в таблицах транзакций типы и состояния распределены неравномерно. Например, с 5-строчной таблицей состояний (которой может быть В2) какое-то состояние может соответствовать большинству строк транзакций или же всего нескольким. В подобных случаях, когда главная таблица содержит асимметричные значения, необходимо исследовать фактическое асимметричное распределение.
180

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

Теперь оставшуюся часть запроса за пределами облака можно оптимизировать как отдельную, следуя стандартным правилам. Оказывается, что АЗ — это наилучшая ведущая таблица с лучшим коэффициентом фильтрации. (Неважно, что АЗ не соединяется напрямую с В2 или СЗ, так как декартово произведение с однострочным набором безопасно.) Отсюда переходим к В5 и Сб, затем наверх к М. Так как Al получила добавленную селективность от унаследованного фильтра по внешнему ключу, указывающему на В2, ее коэффициент фильтрации лучше, чем у А2, поэтому далее присоединяем Al. На данный момент порядок соединения — (СЗ, Dl1 D2. В2. АЗ. В5, Сб. M1 Al), а запрос с облаком соединения выглядит как на рис. 6.17.

Так как мы заранее считали В2, следующие допустимые узлы — BI и А2, и у А2 лучший коэффициент фильтрации. Это позволяет добавить в список допустимых узлы ВЗ и В4, и оказывается, что унаследованный фильтр для ВЗ делает его лучшим выбором для очередного соединения. Завершая порядок соединения, следуя обычным правилам, добавляем В4, С5, BI, С4, С2 и Cl в указанном порядке. Полный порядок соединения — (СЗ. Dl. D2. В2. АЗ, В5. Сб. М. Al. А2. ВЗ. В4. С5. BI. С4. С2, Cl).

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

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

181

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

Детальные коэффициенты фильтрации, близкие к 1,0

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

Как обычно, начните с наилучшего фильтра, соответствующего В4, и используйте индекс. Затем переходите к остальным таблицам через вложенные циклы по индексам по ключам соединения. В отличие от предыдущих случаев, до того как рассмотреть соединения вверх с коэффициентами соединения, равными 1,0, не нужно выполнять все соединения вниз.

Cl 0.6

С6 0.9

D10J D2

Рис. 6.18. Случай с детальными коэффициентами соединения, равными 1,0

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

Очевидно, здесь есть соединения вида «один ко многим», очень близкие к «один к одному» Также существуют соединения «один к нулю» и «один ко многим», где случаи «один к нулю» аннулируют увеличение количества строк после выполнения соединений «один ко многим». В любом случае, с точки зрения оптимизации, это практически то же самое, что соединения «один к одному».
182

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

Как обычно, найдите фильтры в соседних узлах. Две первые лучшие возможности — это С5, а затем С4. Затем у вас есть только одна возможность — выполнить соединение вверх к нефильтрованному узлу А2, которое вы бы выполнили следующим, даже если детальный коэффициента соединения был бы велик. Получается, что небольшой коэффициент соединения с А2 не играет роли. На данный момент порядок соединения (В4. С5. С4. А2).

Из облака вокруг этих узлов найдите соседние узлы ВЗ (вниз) и M (вверх). Так как детальный коэффициент соединения с M равен 1,0, то, если прочие факторы говорят в пользу М, не нужно выбирать соединение вниз. Ни у одного из узлов нет фильтра, поэтому посмотрите на фильтры для узлов, соседних с рассматриваемыми узлами. Лучший коэффициент фильтрации рядом с M равен 0,3 (для Al), а лучший коэффициент фильтрации рядом с ВЗ равен 0,5 (для С2), поэтому мы выбираем присоединение М, а затем Al. Сейчас порядок соединения (В4, С5. С4, А2. М. Al). Теперь, когда база данных пришла к корневому узлу, все соединения будут вести вниз, поэтому можно применять обычные правила оптимизации, выбирая из примыкающих к облаку узлов и для решения спорных вопросов рассматривая узлы, соседние с данными. Полный оптимальный порядок соединения (В4, С5. CA, А2. М. Al, ВЗ, С2. BI. Cl. АЗ. В5, Сб. СЗ. Dl. (D2. В2)).
Предыдущая << 1 .. 84 85 86 87 88 89 < 90 > 91 92 93 94 95 96 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100