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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 123 124 125 126 127 128 < 129 > 130 131 132 133 134 135 .. 161 >> Следующая

262

8. Почему метод диаграмм работает

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

Выбирая следующий узел в последовательности, обрабатывайте все соединения с коэффициентом соединения D, меньшим 1,0, как соединения вниз. И при сравнении узлов считайте DxR эффективным коэффициентом фильтрации узла, где R — это коэффициент фильтрации одного узла.

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

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

Резюме

Без анализа «в лоб» огромных чисел, относящихся к планам выполнения, идеальная оптимизация запросов со многими таблицами лежит за пределами сегодняшнего состояния дел. Даже если будут сделаны определенные шаги вперед, идеальная оптимизация, вероятно, останется за пределами возможностей ручных методов настройки. Если вы решили зарабатывать на жизнь настройкой SQL-запросов, то без работы вы не останетесь. Проблема настройки SQL достаточно сложна, чтобы не удивляться такому положению дел. Ho что действительно удивительно — так это тот факт, что, сосредоточившись на надежных планах выполнения и нескольких достаточно простых правилах, вы можете подойти вплотную к идеальной оптимизации для подавляющего большинства запросов. Локальная информация об узлах на диаграмме соединений, в частности, информация о коэффициентах фильтрации, оказывается вполне достаточной для выбора эффективного и надежного плана, не принимая во внимание его полную комбинаторную сложность.
Особые случаи

В этой главе рассматривается набор иногда возникающих особенных случаев. В главах 6 и 7 перечислены обычные решения для стандартных типов задачи «Какой план выполнения мне нужен?». Здесь я дополню рассмотренные решения, чтобы помочь вам лучше справиться с несколькими нетипичными случаями.

Внешние соединения

В каком-то смысле этот раздел принадлежит главе 6 или 7, так как во многих приложениях внешние соединения встречаются так же часто, как и внутренние. Действительно, в этих главах уже обсуждались некоторые проблемы, касающиеся внешних соединений. Однако некоторые вопросы о внешних соединениях логически исключаются из проблемы настройки SQL-запроса, а ответы на эти вопросы более понятны, если вы уже знакомы с аргументами, приведенными в главе 8. Таким образом, здесь я завершу обсуждение внешних соединений.

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

Я уже рассматривал несколько специальных вопросов относительно внешних соединений в главе 7 в соответствующих разделах.

¦ Фильтрованные внешние соединения.

¦ Внешние соединения, ведущие к внутренним соединениям.

¦ Внешние соединения, указывающие на детальную таблицу.

¦ Внешние соединения с представлениями.

Все эти случаи требуют особых средств решения, описанных в главе 7. Здесь я расширяю правила, данные в главе 7, чтобы суметь еще лучше оптимизировать
264

9. Особые случаи

простейший и наиболее часто встречающийся случай — простые, неотфильтро-ванные внешние соединения вниз с таблицами, являющимися либо листовыми узлами диаграммы запроса, либо узлами, ведущими к другим внешним соединениям. На рис. 9.1 проиллюстрирован такой случай с 16 внешними соединениями.

ОПРАВДАНИЕ ИСПОЛЬЗОВАНИЯ ВНЕШНИХ СОЕДИНЕНИЙ ----------------------------------------

Я часто слышу обсуждения внешних соединений в таком стиле: «Оправдай превращение этого соединения во внешнее соединение, докажи, что затраты на внешнее соединение здесь необходимы».

Так как я не вижу никаких затрат в правильно реализованных внешних соединениях, то задаю противоположный вопрос: «Зачем использовать внутреннее соединение, если внешний случай внешнего соединения может быть полезен?»
Предыдущая << 1 .. 123 124 125 126 127 128 < 129 > 130 131 132 133 134 135 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100