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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 147 148 149 150 151 152 < 153 > 154 155 156 157 158 159 .. 161 >> Следующая


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

Начиная с коэффициентов фильтрации, найдите средневзвешенный коэффициент фильтрации для условия по Customers PhoneJJumber непосредственно как Al, то есть результат запроса Ql (0,000003). Точно так же найдите коэффициент фильтрации для Orders, из Q3, который для АЗ возвращает результат 0,2.

Так как у остальных четырех псевдонимов фильтров нет, коэффициенты фильтрации для них равны 1,0 и их значение не нужно указывать на диаграмме запроса для этих узлов.

Для каждого соединения найдите детальный коэффициент соединения и запишите его у верхнего конца каждой стрелки, обозначающей соединение. Для этого разделите количество строк, возвращаемое при соединении двух таблиц, на количество строк в нижней таблице (главной для этого отношения главной и детальной таблиц). Коэффициенты для верхних концов соединения от OD к S, 0 и P равны 2 (А9/А8), З (А7/А4) и 100 (А11/А10), соответственно. Коэффициент для верхнего конца соединения от S к А равен 4 (А13/А12). Коэффициент для верхнего конца соединения от 0 к С равен 0,8 (А5/А2).

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

Приложение Б. Полный и непрерывный процесс

возвращаемое соединением двух таблиц, на количество строк в каждой верхней таблице (детальной для этого отношения главной и детальной таблиц). Коэффициент для нижнего конца соединения от OD к S равен 0,9 (А9/А6). Все прочие главные коэффициенты соединения оказываются равными 1,0, поэтому на диаграмме их указывать не нужно.

Добавьте коэффициенты фильтрации и коэффициенты соединения к скелету запроса (см. рис. Б.З), чтобы создать полную диаграмму запроса, показанную на рис. Б.5.

Рис. Б.5. Полная диаграмма запроса

Решение диаграммы запроса

После того как вы упростили содержащий различные детали запрос до абстрактной диаграммы соединения, то прошли уже 80 % пути поиска лучшего плана выполнения, так же, как проблемы эквивалентности в математике обычно становятся тривиальными, если преобразовать их в символьную форму. Однако вам еще предстоит решить символьную задачу. Используя методы из главы 6, решите задачу, абстрактно изображенную на рис. Б.5.

1. Выберите лучшую ведущую таблицу. Лучший (наиболее близкий к 0) коэффициент фильтрации принадлежит С, поэтому ведущей выберите таблицу С.

2. От С вниз не ведут никакие соединения, поэтому надо выбрать единственное соединение вверх с 0, поместив 0 второй в порядок соединения.

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

Даже если бы существовали соединения вниз от С, вы бы все равно выбрали соединение с 0, так как детальный коэффициент соединения с 0 меньше 1,0, и у 0 собственный хороший фильтр.

3. У 0 нет необработанных соединений вниз, поэтому выберите единственное соединение вверх с 0D, поместив OD третьей в порядок соединения.

4. Начиная с 0D, мы обнаруживаем два необработанных соединения вниз: с S и с Р. Для оставшихся узлов нет простых фильтров, но существует скрытый фильтр соединения в соединении с S, так как главный коэффициент соединения для него меньше 1,0. Таким образом, следует присоединить S, помещая ее четвертой в порядок соединения.
Проверка планов выполнения

315

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

Если бы существовал фильтр для узла Р, то вы бы сделали неявный фильтр OD. Shipment_ID IS NOT NlILL явным. Тогда вы могли бы использовать этот фильтр перед соединением с S и перейти к фильтру для P после того, как получите преимущества фильтра NOT NlILL, не платя дополнительную цену за соединение с S перед Р.

5. Оставшиеся узлы, А и Р, не фильтруются, и достижимы при помощи соединений от уже обработанных таблиц. Их главные коэффициенты соединения равны 1,0, поэтому нет разницы, в каком порядке присоединять их. Просто для упорядочения произвольно выберите А пятой в порядке соединения, a P присоедините последней. Таким образом, оптимальный порядок соединения — (С. 0. OD. S. А. Р).

6. Получив порядок соединения, укажите полный план выполнения, следуя правилам для надежных планов выполнения, в оптимальном порядке соединения.

1) Перейти к первой таблице Customers через индекс по столбцу фильтрации, Phone_Number. Если это необходимо, следует изменить запрос, чтобы сделать этот индекс доступным и полезным.

2) Методом вложенных циклов присоединить Orders через индекс по внешнему ключу Customer_ID.

3) Методом вложенных циклов присоединить 0rder_Details через индекс по внешнему ключу 0rder_ID.

4) Методом вложенных циклов присоединить Shi pments через индекс по первичному ключу Shipment_ID.

5) Методом вложенных циклов присоединить Addresses через индекс по первичному ключу Address_ID.
Предыдущая << 1 .. 147 148 149 150 151 152 < 153 > 154 155 156 157 158 159 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100