Программирование >>  Полное сканирование таблицы 

1 ... 67 68 69 [ 70 ] 71 72 73 ... 107


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

Соединение вида один к одному с намного меньшим набором данных

На другом конце спектра находится случай, показанный на рис. 7.18, - соединение вида один к нулю или один к одному , котороепрактически всегда работает как один к нулю . Этот случай идеально оправдывает разделение таблиц. Для крошечного поднабора сущностей, представленного таблицей 12, могут существовать другие требования оптимизации, отличные от требований для расширенного набора, представленного таблицей Т1. Вероятно, Т1 обычно опрашивается без соединения с Т2, и в этих случаях исключение ненужных столбцов Т2 и поддержка только тех индексов, которые имеют смысл для общих сущностей, полезны. Здесь скрытый фильтр соединения, представленный низким главным коэффициентом соединения на стороне Т2 соединения отлично работает. Он настолько хорош, что вы даже можете начать выполнение запроса с не фильтрующегося полного сканирования таблицы 12 и все так же найти наилучший путь к остальным данным. Если вы объедините эти таблицы в одну, то добиться подобного плана исполнения будет трудно, разве что за счет создания индексов, бесполезных для всех остальньк случаев.


Рис 7.18. Соединение вида один к нулю или один ко многим между сильно различающимися по размеру таблицами

Здесь главная задача - не забыть учесть скрытый фильтр соединения от Т1 к Т2, либо начиная запрос с Т2, либо обрабатывая ее как можно скорее, чтобы как можно раньше использовать скрытый фильтр.



Рис. 7.19. Соединение вида (ноль или один) к (нулю или одному)

Соглашения для изображения соединений вида один к одному

Полезно иметь определенные договоренности о едином изображении диаграмм запросов. Такие соглашения помогают развивать интуицию, единообразно представляя ключевую информацию. Односторонние стрелки всегда указывают вниз. На рис. 7.20 показано два альтернативных варианта, хорошо подходящих для соединений вида один к одному , лежащих под корневой детальной таблицей. В первом варианте особенно подчеркивается двухсторонняя стрелка, узлы на концах которой размещены на одном уровне. Во втором варианте подчеркивается обычное направление ссылок - вниз от корневой детальной таблицы. Любой из вариантов хорош, если вы помните, что соединения вида один к одному в каком-то смысле с обеих сторон указывают вниз.



Рис. 7.20. Диаграммное изображение соединений вида один к одному , лежащих под корневой детальной таблицей

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

Соединения вида один к одному со скрытыми фильтрами соединения в обоих направлениях

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



ный ключ, то связь сверху с Т1 по закону транзитивности точно так же может относиться и к Т2, если только она не ведет к некоторому альтернативному уникальному ключу по Т1, который в Т2 не используется. Это неявный случай циклического соединения, показанный в варианте Б на рис. 7.2.

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



Рис. 7.21. Альтернативные способы диаграммного изображения для корневых детальных таблиц с отношением (ноль или один) к (нулю или одному)

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

,1 1

>Г2


т5 т6


т8 т9


т5 т6

т8 т9

Рис. 7.22. Альтернативные способы диаграммного изображения корневых детальных таблиц с точным отношением один к одному

Внешние соединения

Практически всегда смысл и назначение внешнего соединения - предотвращение потери нужной информации из таблицы, находящейся в начале соедине-



1 ... 67 68 69 [ 70 ] 71 72 73 ... 107

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика