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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 109 110 111 112 113 114 < 115 > 116 117 118 119 120 121 .. 161 >> Следующая


1. Пусть D — детальный коэффициент соединения для полусоединения, a M — главный коэффициент соединения. Пусть S — лучший (наименьший) коэффициент фильтрации среди всех узлов в подзапросе, a R — лучший (наименьший) коэффициент фильтрации среди всех узлов во внешнем запросе.

2. Если D х S < M х R1 то корреляционный коэффициент предпочтения равен (D х S)/(M х R).

3. Иначе, если S > R, то корреляционный коэффициент предпочтения равен S/R.

4. Иначе, пусть E — измеренное время выполнения наилучшего плана исполнения, который начинает с внешнего запроса и переходит к подзапросу (следуя логике EXISTS). Пусть I — измеренное время выполнения наилучшего плана, который начинает с внутреннего запроса и переходит к внешнему (следуя логике IN). Пусть корреляционный коэффициент предпочтения равен I/Е. Если вы смогли оценить корреляционный коэффициент предпочтения при помощи шага 2 или 3, то на основе этих значений можете уверенно выбрать направление обработки подзапроса, не измеряя реальное время выполнения.

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

Значение, вычисленное на шаге 2 или 3, может не совпадать с точным временем выполнения, которое вы можете получить измерением. Однако оценка достаточно точна, если она умеренна и избегает значений, которые могут привести к неверному выбору ведущего запроса между внешним запросом и подзапросом. Правила на шаге 2 и 3 специально предназначены для случаев, когда такая надежная, умеренная оценка вполне применима.

Если на шаге 2 или 3 вы не смогли получить правильную оценку, то безопаснее и проще всего использовать значение, полученное при реальном измерении. В таком редком случае поиск безопасного вычисленного значения будет намного сложнее, и результат не оправдает усилий.

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

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

235

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

2. Если подзапрос — это однотабличный запрос без фильтрующего условия, только с условием корреляционного соединения, измерьте q (количество строк, возвращенное внешним запросом, если убрать условие подзапроса) и t (количество строк, возвращенное полным запросом, включая подзапрос). Уточненный коэффициент фильтрации подзапроса равен t/q. В этом случае условие EXISTS достаточно легко проверяется. База данных просто ищет первое совпадение в индексе соединения.

3. Иначе, для полусоединения, пусть D — это детальный коэффициент соединения. Пусть s — коэффициент фильтрации корреляционного узла (то есть узла, присоединенного к связи полусоединения) на детальном конце, то есть конце, принадлежащем подзапросу.

4. Если D <1, то уточненный коэффициент фильтрации подзапроса равен s х D.

5. Иначе, если s х D < 1, то уточненный коэффициент фильтрации подзапроса равен (D - I + (s х D))/D.

6. Иначе, пусть уточненный коэффициент фильтрации подзапроса равен 0,99. Даже очень плохо фильтрующее условие EXISTS позволит в действительности избежать увеличения количества строк и обеспечит лучшую стоимость фильтрации на единицу измерения, чем соединение вниз совсем без фильтра. Это последнее правило относится к случаям «лучше, чем ничего» (правда, ненамного лучше).

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

Как прочие правила в этой книге, эти правила вычисления корреляционного коэффициента подзапроса и уточненного коэффициента фильтрации подзапроса являются эвристическими. Так как точные числа редко необходимы для выбора правильного плана исполнения, эти тщательно спроектированные, надежные эвристические правила позволяют принять правильное решение по крайней мере в 90 % случаев, и практически никогда не выдают очень плохих решений. Как и во многих других частях книги, точное вычисление коэффициентов для сложного запроса находится далеко за пределами возможностей ручных методов настройки.

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

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

7. Диаграммное изображение и настройка сложных SQL-запросов

Проверьте свой ответ, прочитав следующее объяснение. Вычислим корреляционный коэффициент предпочтения.

1. Пусть D = 2 и M = 1 (что подразумевает отсутствие этого числа на диаграмме). Пусть S = 0,015 (наилучший коэффициент фильтрации среди всех в подзапросе, принадлежащий таблице S3, которая находится на два уровня ниже корневой детальной таблицы D подзапроса). Пусть теперь R = 0,01, то есть равно значению наилучшего фильтра среди всех узлов дерева под корневой детальной таблицей M внешнего запроса, включая этот узел.
Предыдущая << 1 .. 109 110 111 112 113 114 < 115 > 116 117 118 119 120 121 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100