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

 

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

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

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

Сложный пример

193

¦ При сравнении узлов во время выбора более поздних соединений рассматривайте значения I - R, где R — это коэффициент фильтрации каждого узла В этом контексте значения ОД и 0,0001 близки. Хотя они различаются в 1000 раз, значения I-R отличаются лишь на 10 %, и соотношение преимущества и стоимости (см. первое правило в этом списке) будет говорить в пользу менее селективного фильтра, если соответствующий узел намного меньше.

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

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

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

M 0.005

2000

T

Cl 04

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

При выборе ведущего узла не стоит идти против правил. Коэффициент фильтрации для H намного лучше с точки зрения выбора ведущей таблицы. Затем возникает проблема выбора между Al и А2, и в обычном случае вы предпочтете более низкий коэффициент фильтрации для А2. Посмотрев на детальные коэффициенты соединения от Al к M и от А2 к М, вы видите, что из Al и А2 возвращается одинаковое количество строк, поэтому нет причин делать выбор на основе размера. Однако если вы посмотрите на узлы ниже этих, то увидите, что Al обеспечивает доступ к двум узлам, которые выглядят еще лучше, чем А2. Нужно попытаться вставить их в план как можно раньше, поэтому вы слегка выиграете, если выберете Al первым. После того как Al стала второй таблицей в порядке соединения, выбор третьей очевиден: В2 намного меньше и лучше фильтруется, чем А2.

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

Если бы под Al не было узла, очевидно говорящего в пользу присоединения его перед А2, то узлы под Al никак не влияли бы на выбор между Al и А2!

Таким образом, порядок соединения — (М. Al. В2). Выбор следующей таблицы менее очевиден. Коэффициент фильтрации у Cl немного хуже, чем у А2, но
194

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

первая таблица намного меньше, в 300 х 2000 раз, поэтому стоимость одной ее строки определенно достаточно низка, чтобы поместить эту таблицу перед А2. Теперь порядок соединения (М. Al. В2, Cl), а следующие допустимые узлы — это BI и А2. Для этих узлов значения (I-R) равны, соответственно, 0,5 и 0,7, и BI вдвое меньше А2, что делает ожидаемую стоимость строки из BI немного меньше. Если бы BI находилась на грани необходимости добавления нового уровня в ее индекс по первичному ключу, у А2, вероятно, был бы дополнительный индексный уровень, и тогда BI была бы лучшим выбором. Так как каждый уровень увеличивает объем приблизительно в 300 раз, маловероятно, что индекс будет настолько близок к границе, что различие в размерах в 2 раза сыграет существенную роль. То есть маловероятно, что небольшое различие в размерах может значить достаточно много, чтобы отвергнуть простые правила, основанные на коэффициенте фильтрации. Даже если BI будет лучше, чем А2, в данной точке плана выполнения это не сыграет большой роли — строки всех четырех уже соединенных таблиц эффективно фильтровались. Так, стоимость последних соединений таблиц будет минимальна, независимо от выбора, по сравнению со стоимостью предыдущих соединений. Таким образом, выберите полный порядок соединения — (М. Al. В2, Cl. А2. BI. ВЗ).

Теперь рассмотрим задачу на рис. 6.31. Попытайтесь решить ее самостоятельно.

M 0.05

Al 0.4 А20.3

BI 05 В202 ВЗ j2000 Cl OJ

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

Этот случай выглядит практически так же, как и предыдущий, но фильтр для И не настолько хорош, а фильтры в ветви Al в целом лучше. Фильтр для M в два раза лучше фильтра следующей наилучшей таблицы, Cl, но у Cl другие преимущества — существенно меньший размер (в 2000 х 300 х 10, или 6 000 000 раз), и она близка к другим фильтрам, обеспечивая чистый дополнительный фильтр 0,2 х 0,4 х 0,5 = 0,04. Если скомбинировать все фильтры в ветви Al, то вы найдете, что чистый коэффициент фильтрации равен 0,04 х ОД = 0,004 — более чем в 10 раз лучше, чем тот же коэффициент фильтрации для М.

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

195

большой таблицы обычно и определяет стоимость запроса. Однако здесь вы видите, что база данных считает всего лишь 8 % строк из M1 если начнет с ветви Al, вместо того, чтобы начать непосредственно с фильтрации М. Поэтому Cl — это лучшая ведущая таблица. Отсюда, следуя обычным правилам, вы найдете полный порядок соединения как (Cl. В2. Al. BI. М. А2. ВЗ).
Предыдущая << 1 .. 90 91 92 93 94 95 < 96 > 97 98 99 100 101 102 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100