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

 

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

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

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


Когда лучший фильтр принадлежит детальной таблице (в этом случае таблице А), то, если Jd = 1, в силе остаются те же аргументы. Если Jd > 1, то большие значения Jd благоприятствуют выбору соединений хэшированием. Однако, если Jd не очень велико, этот фактор обычно не может превзойти преимущества обращения к каждой таблице через самый селективный фильтр. Когда значение Jd достаточно велико, это подразумевает, что главная таблица В намного меньше детальной таблицы А, и, следовательно, будет намного лучше кэширована. А значит, стоимость обращения к ней будет меньше вне зависимости от метода соединения. Я подробно описывал этот вариант в разделе «Случаи, когда нужно выбрать соединения хэшированием» главы 6, поэтому не буду повторяться. Смысл в том, что даже в случаях, когда соединения хэшированием максимально улучшают стоимость данного соединения, они обычно уменьшают только сравнительно небольшую составляющую стоимости запроса — стоимость обращения к намного меньшей, хорошо кэшированной главной таблице. Чтобы достигнуть даже этого небольшого преимущества, базе данных приходится помещать присоединяемый набор строк в память или, что еще хуже, временно хранить хэшированный набор на диске.

Выбор ведущей таблицы

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

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

Что может сказать такая диаграмма с отсутствующими связями? Даже без связей и коэффициентов соединения вы можете уверенно сделать несколько заключений.
256

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

¦ M — это корневая детальная таблица, вероятно, самая большая и хуже всех кэшированная во всем запросе. Пусть количество строк этой таблицы равно С.

¦ Al, А2 и АЗ — это главные таблицы, которые присоединяются непосредственно к М.

¦ Все прочие таблицы — это также главные таблицы, и, вероятно, присоединяются к M не напрямую, а через промежуточные соединения.

M

Рис. 8.2. Частично скрытая диаграмма запроса

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

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

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

Конечно, если В4 соединяется напрямую с другими узлами с фильтрами до того, как произойдет соединение с М, можно получить еще более хороший результат. Однако если вы выбираете соединения методом вложенных циклов, то сразу же можете утверждать, что верхняя граница стоимости считывания данных из корневой детальной таблицы равна С х Fd, где Fd — это коэффициент фильтрации выбранной ведущей таблицы. Это объясняет правило выбора ведущей таблицы, которое требует, чтобы ведущим был выбран узел с наименьшим коэффициентом фильтрации. Чтобы еще раз убедиться в справедливости правила, на рис. 8.4 связи, указанные на рис. 8.3, реорганизованы, чтобы новая диаграмма максимизировала преимущество варианта, альтернативного выбору ведущей таблицей таблицы В4.

Теперь если вы начнете с Al или любого узла под ней, то сможете использовать все фильтры кроме фильтра для В4 до того, как обработаете М. В результате из M будет считано количество строк, равное С х 0,0045 (С х 0,3 х 0,7 х 0,6 х 0,5 х 0,5 х 0,2 х 0,9 х 0,8),
Выбор ведущей таблицы

257

что более чем в четыре раза хуже, чем стоимость при выборе ведущей таблицей В4. Кроме того, с плохим первым фильтром стоимость доступа к другим таблицам в начале порядка соединения также будет высока, если только размер всех этих таблиц не окажется небольшим.
Предыдущая << 1 .. 120 121 122 123 124 125 < 126 > 127 128 129 130 131 132 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100