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

 

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

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

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


Обратите внимание, что на рис. 6.19 для L указан коэффициент фильтрации 1,0, что означает, что для L нет фильтра. Обычно такие коэффициенты не указываются. Однако я включил в диаграмму коэффициент фильтрации для L, чтобы объяснить, что число 0,01 в верхней части связи с L — это детальный коэффициент соединения для связи от E к L, а не коэффициент фильтрации для L.

Предположим, что у нас есть 1000 сотрудников, 10 отделов и 10 займов для 8 из этих сотрудников. Пусть единственный фильтр отбрасывает половину отделов. Детальный коэффициент фильтрации для Loans должен быть равен 0,01, так как после соединения 1000 сотрудников с таблицей Loans мы найдем только 10 займов. Исходные правила требуют, чтобы мы начали с единственной фильтрованной таблицы, Departments, считали 5 строк, соединили с половиной сотрудников (еще 500 строк), и затем соединили с приблизительно половиной займов (для приблизительно 4 сотрудников в выбранной половине отделов). Таким образом, база данных считает 5 займов, выполнив 496 безуспешных операций сканирования диапазонов индекса Employee_ID для Loans, используя идентификаторы Employee_ID сотрудников без займов.

С другой стороны, если таблица Loans унаследует преимущество фильтрующего соединения, то вы бы начали с Loans, считали из нее все 10 строк, а затем нашли бы 10 соответствующих строк в Employees (8 различных строк с повторениями). Наконец, 10 раз выполнили бы соединение с Departments, причем база данных отбросила бы в среднем половину строк. Хотя обычная цель оптимизации — минимизировать количество строк, считанных из основной таблицы, этот пример демонстрирует, что минимизация количества операций считывания из таблицы на верхнем конце сильно фильтрующего детального соединения гораздо менее важна, чем минимизация количества строк из намного большей таблицы на нижнем конце.

Насколько хорошим должен быть фильтр для Empl oyees, чтобы снизить количество строк, считанных из этой таблицы, до количества строк во втором плане? Фильтр должен быть в точности таким, как коэффициент фильтрующего соединения, 0,01. Предположим, что он даже лучше — 0,005, и пропускает только 5 сотрудников (скажем, это фильтр по Last_Name). В этом случае какую таблицу следует присоединить следующей? Опять-таки исходные правила привели бы нас
Сложный пример

185

к Departments, потому что она находится ниже и потому что у нее лучше коэффициент фильтрации. Однако обратите внимание, что для 5 сотрудников база данных считает в среднем только 0,05 займов, поэтому гораздо лучше сначала соединить с таблицей Loans, а затем с Departments.

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

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

Оптимизация детальных коэффициентов соединения, меньших 1,0, по формальным правилам

На рис. 6.20 показан еще один пример с детальным коэффициентом соединения, меньшим 1,0. Перед тем как продолжать чтение, попробуйте найти порядок соединения самостоятельно.

M 0.03

Al 0.01 А2

T T

BI OJS В20.05

Рис. 6.20. Пример с детальным коэффициентом соединения, меньшим 1,0

Сначала изучим влияние коэффициента соединения на выбор ведущей таблицы. На рис. 6.21 я показал корректировки коэффициентов фильтрации с точки зрения правильного выбора ведущей таблицы. После того как эти изменения будут внесены, эффективный фильтр для М, равный 0,003, станет лучшим, поэтому начинаем цепочку соединений с таблицы М. На этой точке нужно вернуть исходные коэффициенты фильтрации, чтобы выбрать дальнейший порядок соединения, так как, если начать с любого узла (М, А2 или В2) на детальной стороне соединения, коэффициент соединения не будет более играть роли. В более сложном запросе может показаться, что подсчитать все эти эффективные значения фильтров для множества узлов на одной стороне фильтрующего соединения очень сложно. На практике необходимо просто найти наилучшие коэффициенты фильтрации на каждой стороне (0,01 для Al и 0,03 для M в данном случае) и сделать единственную корректировку для наилучшего коэффициента фильтрации на стороне соединения с фильтром.

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

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

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

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