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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 97 98 99 100 101 102 < 103 > 104 105 106 107 108 109 .. 161 >> Следующая


SELECT TC. Column Jlame

FROM Indexes Ind. IndexJtolumns IC1 Table_Columns TC WHERE Ind.Index_Name - 'EMPLDYEESJ1'

AND Ind.Index ID - IC.Index ID AND Ind.TableJD - TC.TableJD AND IC.Column_Number - TC.Column_Number ORDER BV IC.Index_Position ASC

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

Перед тем, как читать дальше, в качестве упражнения попробуйте создать диаграмму для скелета этого запроса самостоятельно.

Если коэффициент фильтрации условия по IndexJIame равен 0,0002, то диаграмма запроса без коэффициентов соединения выглядит как на рис. 7.7.

Здесь две ошибки (то есть два соединения, на концах которых нет полных первичных ключей) компенсируют друг друга, если рассматривать соединения с TC
Необычные диаграммы соединений

209

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

Если вы выполните правило большого пальца, которое заставляет проводить соединение от полных первичных ключей (или к ним), то наилучший порядок соединения для рис. 7.7 станет очевидным. Начните с фильтра для Ind и перейдите по связи вверх к IC. Только после этого, получив обе части первичного ключа для TC, можно выполнять соединение с TC. На самом деле это лучший план исполнения для этого примера. Правило большого пальца в таких случаях — следовать по этим необычным связям к составному первичному ключу после того, как база данных обработает все узлы наверху, необходимые для использования полного первичного ключа.

Резюме по циклическим соединениям

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

1. Две главные таблицы с отношениями «один к одному» разделяют одну и ту же детальную таблицу.

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

2. В главной и детальной таблицах хранятся копии внешнего ключа, который указывает на один и тот же первичный ключ третьей таблицы

В этом случае у вас также есть возможность увеличить количество степеней свободны в порядке соединения, но он подразумевает денормализацию, которая обычно не оправдывает себя. Если у вас есть выбор, лучше избавиться от

IC

TC

Рис. 7.7. Конкретный пример для четвертого типа циклических соединений

Рис. 7.8. Комбинирование составных соединений от внешних ключей, распределенных по двум таблицам
210

7. Диаграммное изображение и настройка сложных SQL-запросов

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

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

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

3. Двухузловой фильтр (не уникальный на обоих концах) уже сцеплен при помощи обычных соединений

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

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

Эти способы обработки позволяют справиться со всеми возможными случаями циклических соединений.

Несвязные диаграммы запросов

На рис. 7.9 показано два случая несвязных диаграмм запросов. Это запросы, которые не объединяют все таблицы в одну связную структуру. В каждом из этих случаев вы видите два независимых запроса; для каждого из них существует отдельная диаграмма, которую можно оптимизировать независимо от другого запроса.

Рис. 7.9. Несвязные диаграммы запросов

В случае А я демонстрирую запрос, состоящий из двух выглядящих независимыми запросов, в каждом из которых есть соединения. В случае Б я демонстрирую немного другой обычный запрос, одна из таблиц которого (таблица Т2) не связана с деревом соединения (то есть не связана ни с какой другой таблицей). Оба случая соответствуют двум независимым запросам, которые выполняются внутри одного. Что же происходит, когда вы сочетаете независимые, несвязные запросы в одном запросе? Когда две таблицы сочетаются в одном запросе без условий соединения, база данных возвращает декартово произведение — все возможные комбинации строк первой таблицы со строками второй таблицы. В случае несвязных диаграмм запросов считайте результаты запросов, представленных каждым независимым
Предыдущая << 1 .. 97 98 99 100 101 102 < 103 > 104 105 106 107 108 109 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100