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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 161 >> Следующая


M

у

Al 0.3 А2 АЗ

D10.8 DZ

Рис. 8.3. Диаграмма запроса, на которой указаны возможные связи

M

Рис. 8.4. Диаграмма запроса, измененная, чтобы минимизировать недостатки выбора ведущей таблицей Al

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

8. Почему метод диаграмм работает

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

м

D1 0.8 D2

Рис. 8.5. Диаграмма запроса с конкурирующими ведущими узлами

В этом сложном случае ВЗ, вероятно, была бы лучшим ведущим узлом, чем В4, так как ВЗ может воспользоваться помощью от соседних узлов перед тем, как вы проведете соединение с М. Это может выглядеть правдоподобно, и я не сомневаюсь, что такой случай может произойти, но, основываясь на своем опыте, могу сказать, что это все же редкость. Я не встречался с подобным случаем за 10 лет работы по настройке SQL, в основном потому, что чрезвычайно трудно встретить два очень селективных фильтра с практически одинаковой величиной селективности в одном запросе. Намного вероятнее, что селективность запроса обеспечивается одним очень селективным условием.

Выбор следующей таблицы для соединения

После того как вы выбрали ведущую таблицу, остальные решения в ходе создания надежного плана выполнения принадлежат к серии вопросов «Что дальше?». Когда вы задаете этот вопрос, это означает, что у вас есть одно облако уже соединенных узлов, которые вы выбрали раньше в порядке соединения, и набор узлов, присоединенных к облаку, один из которых можно присоединить следующим. Если диаграмма запроса имеет обычную структуру дерева, максимум один узел будет находиться над текущим облаком, и любое количество узлов может «свисать» из него. На рис. 8.6 показан типичный случай.

Рассмотрим вопрос «Что дальше?» в этой точке в порядке соединения. База данных получила некоторое количество строк, которое я обозначу какЫ. Соединения с таблицами ниже текущего облака соединения умножат текущее количество строк на какой-то коэффициент: коэффициент фильтрации, умноженный на глав-
Выбор следующей таблицы для соединения

259

ный коэффициент соединения. Пусть F=RxM, где R — коэффициент фильтрации, a M — главный коэффициент соединения (равный 1,0, если не указано другое число). Чем больше коэффициент сокращения количества строк, равный I - F, тем ниже стоимость будущих соединений, поэтому узлы с большими значениями I-F важны для оптимизации оставшейся части запроса, и их следует присоединить как можно раньше. У сокращения количества строк тоже есть определенная стоимость, основанная на стоимости каждой строки, участвующей в соединении, которую я обозначу С. Отношение преимуществ к стоимости рассматриваемого соединения вниз равно (I - F)/C. Если полагать, что считывание каждой строки из всех таблиц, находящихся ниже уже соединенных узлов, стоит одинаково, то выбор узла снизу с максимальным значением (I - F)/C эквивалентен выбору узла с минимальным F.

узлад

A OJ

2

( Присоединенные'; Ч , узлы v/

BI

В4 03 В5 07

Y

В2 04 ВЗ 02

(*'г' •* Необработанные узлы

Рис. 8.6. Типичная точка выбора во время оптимизации порядка соединения

Как же тогда можно улучшить оптимизацию? Существует три возможности улучшения, которые перечислены в разделе «Специальные правила для специальных случаев» главы 6.

1. He у всех узлов снизу одинаковая стоимость считывания строки соединения, поэтому в действительности параметр С отличается у разных узлов.

2. Полная выгода соединения иногда появляется не сразу, а после соединения с другими узлами, находящимися еще ниже, доступ к которым открылся через промежуточное соединение.

3. Иногда узел сверху обеспечивает лучшее отношение преимуществ к стоимости, даже если еще остались необработанные узлы внизу.

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

8. Почему метод диаграмм работает

Объяснение различной стоимости считывания строки

Чаще всего узлы в нижней части диаграммы меньше, чем самая большая таблица, уже обработанная в плане выполнения. Поэтому чаще всего они лучше кэшированы и маловероятно, что для них существуют более глубокие индексы, чем для самой большой уже обработанной таблицы, поэтому их воздействие на общую стоимость обычно минимально. Даже когда стоимость считывания данных из узлов внизу значительно варьируется, стоимость предположения, что она одинакова для всех узлов, обычно минимальна по сравнению с общей стоимостью запроса. Как бы то ни было, вероятность значительных различий стоимости оправдывает исключение, уже упомянутое в главе 6: «В трудных случаях сначала обрабатывайте небольшие таблицы. После того, как вы выбрали ведущую таблицу, реальное соотношение преимуществ и стоимости соединения со следующей главной таблицей равно (I - F)/C. Небольшие таблицы лучше кэшированы и у них обычно меньше уровней индекса, что уменьшает С и улучшает соотношение преимуществ и стоимости для маленьких таблиц».
Предыдущая << 1 .. 121 122 123 124 125 126 < 127 > 128 129 130 131 132 133 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100