|
Программирование >> Полное сканирование таблицы
Так как обработка начнется с корневой детальной таблицы, шаг 3 никогда не будет выполняться. У вас нет узлов выше начальной точки. Облако соединенных таблиц, таким образом, будет расти сверху вниз, но помните, что следующий лучший узел может находиться в любом месте около границы облака, не обязательно рядом с последней присоединенной таблицей. Перед тем как продолжать чтение, попытайтесь найти наилучший порядок соединения самостоятельно. Первые допустимые узлы - это А1, А2 и A3, а лучший коэффициент фильтрации относится к А1, поэтому вторым в порядок соединения мы помещаем узел А1. После расширения облака на А1 в список допустимых узлов добавляются узлы В1 и В2, причем А2 и A3 таюке остаются допустимыми. Среди этих четырех узлов у A3 наилучший коэффициент фильтрации, поэтому его мы присоединяем следующим. Итак, на данный момент порядок соединения (М. А1. A3), а облако соединения выглядит как на рис. 6.10. tf Ato, .# А2а7 В10.6 В2 С1 0.6 С2 0.8 С4 0.8 С5 0.2 С6 0.9 D1 08 D20? Рис. 6.10. Облако соединения после обработки первых трех таблиц Список допустимых узлов, присоединенных к облаку, теперь выглядит как В1, В2, А2 и В5. Среди них у В1 наилучший коэффициент фильтрации, поэтому мы присоединяем его следующим и расширяем облако, одновременно добавляя в список допустимых узлов С1. Теперь можно выбирать из узлов В2, А2, В5 и С1. Среди них наилучшим является С1, поэтому мы присоединяем его и расширяем облако. От С1 вниз не ведут никакие связи, поэтому мы выбираем следующий наилучший узел из текущего списка. Это А2, поэтому к списку допустимых узлов добавляются ВЗ и В4, и он теперь выглядит как В2, В5, ВЗ и В4. На данный момент порядок соединения (М, А1. A3. В1. С1. А2), а облако соединения выглядит как на рис. 6.11. Среди допустимых узлов наилучший коэффициент фильтрации на данный момент у В4, поэтому мы присоединяем его. (Было бы удобнее присоединить его раньше, но это невозможно, пока база данных не достигнет А2.) После присоединения В4 в список допустимых попадают узлы С4 и С5, и теперь этот список включает 82, 85, ВЗ, С4 и С5. Из них лучшим является С5, поэтому присоединяем его. Теперь порядок соединения (М. А1. A3. 81. С1. А2. 84. СБ), а облако соединения выглядит как на рис. 6.12. М 0.001 Й1/ 02 08 СЗ С4 08 С502 С6 09 D108 D20? Рис. 6.11. Облако соединения после обработки первых шести таблиц В5 0.75 02 0.8 СЗ С4 0.8 05 02: I 06 0.9 0108 D20? Рис. 6.12. Облако соединения после обработки первых восьми таблиц Теперь допустимые узлы сразу под облаком соединения - это В2, ВЗ, 85 и С4, и лучшим кандидатом на присоединение среди них является 85. Он добавляет в список допустимых узел Сб, а следующим наилучшим узлом становится С4, который в список допустимых не добавляет никаких узлов. Очередной наилучший узел - это Сб, но он также не пополняет список допустимых узлов, поэтому выбирать можно только из 82 и 83. Ни для одного из них нет фильтра, поэтому мы проверяем фильтры следующего шага и обнаруживаем, что 83 позволяет перейти к фильтру для С2, поэтому следующим мы присоединяем 83. Сейчас порядок соединения - (М. А1. A3. 81. С1, А2, 84. С5. 85, С4. Сб. 83), а облако соединения выглядит как на рис. 6.13. 0108 D20? Рис. 6.13. Облако соединения после обработки первых двенадцати таблиц Теперь выбирать можно из 82, С2 и СЗ, причем только у С2 есть фильтр, поэтому присоединяем ее следующим. Ниже него больше нет узлов, поэтому допустимыми остаются узлы 82 и СЗ, а схема разрешения конфликтов говорит нам, что после СЗ на следующем шаге появляются фильтры для D1 и D2, поэтому мы присоединяем СЗ. Теперь порядок соединения - (М. А1. A3. 81. С1. А2, 84. С5. 85. С4. Сб, 83. С2. СЗ). Допустимые узлы внизу - это 82, D1 и D2. На данной точке процесса это все оставшиеся узлы, под которыми мы не найдем очередных кандидатов на присоединение. Просто отсортируем оставшиеся узлы по коэффициенту фильтрации и завершим порядок соединения - (М. А1. A3. 81. С1. А2. В4. С5. В5. С4. Сб. ВЗ. С2. СЗ. D1. D2. В2). В реальных запросах такая ситуация, в которой требуется лишь отсортировать напрямую присоединенные к облаку узлы, возникает несколько раньше. В достаточно распространенном особом случае, когда есть одна детальная таблица, от которой отходят только прямые соединения с поиском в главных таблицах (обычно это таблицы размерности) - такое соединение относится к типу звезда - главные узлы нужно сортировать в самом начале.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |