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

 

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

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

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


M 0.005

Ў

Cl 002

Рис. 6.29. Еще один запрос с фильтрующим главным соединением

Как бы изменилась ситуация, если бы коэффициент фильтрации для Al равнялся 0,01? Превращая подразумеваемое условие «не null» для Forei gnKeyToB2 в явное в SQL-коде, как в предыдущих примерах, можно было бы сделать селективность фильтра с несколькими условиями равной 0,1 х 0,01 = 0,001, лучше, чем эффективный коэффициент фильтрации для Cl. Так, Al стала бы ведущей таблицей. После того как фильтр соединения «сгорел», можно выбирать порядок соединения на основе простых коэффициентов фильтрации. Этот порядок: (Al. В2. Cl. BI. М. А2. ВЗ).

Близкие коэффициенты фильтрации

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

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

¦ В полезных запросах редко бывает много фильтров, обычно их от одного до трех.

¦ Среди нескольких фильтров (но когда произведение всех фильтров невелико), по крайней мере, один фильтр должен быть небольшим и селективным. Намного проще добиться надежной и существенной селективности одним селективным фильтром (возможно, в сочетании с несколькими фильтрами средней селективности), чем при помощи целой группы практически одинаково селективных фильтров.
192

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

¦ Если один фильтр намного селективней остальных, выбор ведущей таблицы становится очень простым.

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

¦ Мой опыт настройки запросов подтверждает, что редко приходится рассматривать вторичные соображения. Мне приходилось делать это меньше, чем раз в год, за несколько лет интенсивной настройки.

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

¦ Сначала обрабатывайте небольшие таблицы. После того, как вы выбрали ведущую таблицу, реальное соотношение преимуществ и стоимости соединения со следующей главной таблицей равно (I - R)/C, где R — коэффициент фильтрации, а С — стоимость считывания одной строки из этой таблицы через первичный ключ. Небольшие таблицы лучше кэшированы и у них обычно меньше уровней индекса, что уменьшает С и улучшает соотношение преимуществ и стоимости для маленьких таблиц.

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

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

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

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

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

Вероятно, мне следует сказать, что сомнения в близких значениях ведущего фильтра возникают регулярно, но только в запросах для небольших таблиц, которые вам не нужно настраивать! Автоматическим оптимизаторам часто приходится заниматься их настройкой, но вам это не нужно.
Предыдущая << 1 .. 89 90 91 92 93 94 < 95 > 96 97 98 99 100 101 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100