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

 

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

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

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


Теперь перейдем к следующему набору правил, чтобы найти уточненные коэффициенты фильтрации подзапросов. Шаг 1 указывает, что нам не нужен уточненный коэффициент фильтрации для D4, так как его корреляционный коэффициент предпочтения меньше 1,0 и меньше всех остальных коэффициентов предпочтения. Перейдем к шагу 2 для Dl (корреляционный коэффициент предпочтения которого больше 1,0) и D2 (коэффициент предпочтения которого больше того же коэффициента для D4). В подзапросах под узлами Dl и D2 есть фильтры, поэтому для каждого из них перейдем к шагу 3. Для Dl найдем D = 0,8 и s - 0,3, то есть значение s равно самому коэффициенту фильтрации для Dl. На шаге 4 заметим, что D < 1, поэтому уточненный коэффициент фильтрации подзапроса равен s х D - 0,24, и мы записываем его рядом с числом 0,8 у верхнего конца полусоединения с Dl.

На шаге 3 для D2 находим, что D = IOhs = 0,5, то есть значение s равно самому коэффициенту фильтрации для D2. На шаге 4 замечаем, что D > 1, поэтому переходим к шагу 5. Обратите внимание, что s х D = 5, что больше 1,0, поэтому переходим к шагу 6. Пусть уточненный коэффициент фильтрации подзапроса равен 0,99, и запишем это число рядом с числом IOy верхнего конца полусоединения с D2.

Теперь единственный отсутствующий коэффициент — это уточненный коэффициент фильтрации подзапроса для антисоединения с D3. Следуя правилам для антисоединений, на шаге 1 находим, что t = 5 и q = 50 для рассматриваемого оператора. На шаге 2 замечаем, что в этом подзапросе есть лишь один узел (как это часто бывает с условиями NOT EXISTS), поэтому С = 1, и вычисляем (С - I + (t/q))/C --(1-1 + (5/50))/1 = 0,1.

Теперь обратимся к правилам настройки подзапросов, имея полную диаграмму запроса. Согласно шагу 1, убедимся, что антисоединение с D3 выражено как коррелированный подзапрос NOT EXISTS, а не как некоррелированный подзапрос NOT IN. Шаг 2 не применяется, так как у нас нет полусоединений (с условиями EXISTS), у которых указатели стрелки посередине связи указывают вниз. Выполняя шаг 3, найдем наименьший корреляционный коэффициент предпочтения — 0,01 для полусоединения с D4, поэтому следует выразить это условие как некоррелированный подзапрос INh убедиться, что остальные условия типа EXISTS выражены как явные условия EXISTS для коррелированных подзапросов. Оптимизируя подзапрос под D4, как если бы это был отдельный запрос, находим, следуя правилам для простых
Решение для задачи из главы 7

309

запросов, что начальный порядок соединения — (D4. S4.S6.S5, S7). Начиная с этого момента, база данных должна выполнить операцию уникальной сортировки по внешнему ключу D4, указывающему на M в этом полусоединении. Вложенные циклы перейдут к M по индексу по первичному ключу М. Оптимизируйте запрос, начиная с М, как если бы условия подзапроса для D4 не существовали.

Шаг 4 не применяется, так как мы начали с подзапроса с условием IN. Шаг 5 следует выполнить, так как в узле M мы находим остальные три соединения с подзапросами. Полусоединение с Dl ведет себя как узел снизу с коэффициентом фильтрации 0,24 — немного хуже, чем Al, но лучше, чем А2. Полусоединение с D2 ведет себя как узел внизу с коэффициентом фильтрации 0,99, чуть лучше, чем соединение вниз с не фильтрованным узлом, но не так хорошо, как соединение с Al или А2. Антисоединение с D3 выглядит лучше всех остальных, как и многие селективные антисоединения, так как ведет себя как узел внизу с коэффициентом фильтрации

0,1 — лучше, чем у остальных.

Таким образом, далее выполняем условие NOT EXISTS для D3 и находим новый порядок соединения (D4, S4, S6. S5, S7. М. D3). Так как подзапрос с D3 состоит из одной таблицы, возвращаемся во внешний запрос и находим следующий лучший среди находящихся внизу узлов — узел Al. Это позволяет выполнить соединение с BI, но BI менее привлекателен, чем еще один возможный вариант, Dl, уточненный коэффициент фильтрации подзапроса которого равен 0,24, поэтому далее присоединяем Dl. Начав обработку этого подзапроса, необходимо закончить его, следуя обычным правилам оптимизации простого подзапроса, и начиная с Dl как с ведущего узла.

Теперь допустимыми становятся узлы А2, BI и D2, которые лучше всего присоединять именно в этом порядке, о чем говорят их коэффициенты фильтрации или (для D2) уточненный коэффициент фильтрации подзапроса. После соединения с А2 появляется новый допустимый узел, В2, но его коэффициент фильтрации равен 1,0, и он не так привлекателен, как остальные. Таким образом, присоединяем А2, BI и D2 в указанном порядке, получая порядок соединения (D4. S4. S6. S5, S7, М, D3. Al. Dl, SI, S2. А2, BI, D2). Достигнув D2, необходимо завершить этот подзапрос, выполнив соединение с S3. После этого остается присоединить только узел В2 и получить полный порядок соединения как (D4, S4, S6, S5. S7. М. D3, Al. Dl. SI. S2, А2, BI. D2, S3. В2).
Приложение Б. Полный и непрерывный процесс

На протяжении всей книги я приводил примеры, иллюстрирующие каждый шаг процесса в деталях, но пока что не описал ни одного процесса полностью, от начала до конца. Если вы предпочитаете рассматривать процессы в полном виде и работать, основываясь на таких примерах, то это приложение предназначено для вас.
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100