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

 

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

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

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


Cl 0.6

С6 0.9

Рис. 6.10. Облако соединения после обработки первых трех таблиц

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

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

173

раньше, но это невозможно, пока база данных не достигнет А2.) После присоединения В4 в список допустимых попадают узлы С4 и С5, и теперь этот список включает В2, В5, ВЗ, С4 и С5. Из них лучшим является С5, поэтому присоединяем его. Теперь порядок соединения (М. Al. АЗ, BI. Cl. А2. В4. С5), а облако соединения выглядит как на рис. 6.12.

Рис. 6.11. Облако соединения после обработки первых шести таблиц

Рис. 6.12. Облако соединения после обработки первых восьми таблиц
174

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

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

Рис. 6.13. Облако соединения после обработки первых двенадцати таблиц

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

175

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

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

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

Специальные правила для особых случаев

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

¦ Промежуточные результаты запроса в форме декартова произведения приводят к плохой производительности. Если вы не будете следовать по связям во время разработки порядка соединения, то в результате получите декартово произведение первого набора строк и набора строк, полученного из следующего по порядку узла. Иногда это безопасно, но даже когда такой результат быстрее, чем порядок соединения по связям, он опасен и плохо работает при увеличении размеров таблиц.
Предыдущая << 1 .. 81 82 83 84 85 86 < 87 > 88 89 90 91 92 93 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100