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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 72 73 74 75 76 77 < 78 > 79 80 81 82 83 84 .. 161 >> Следующая


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

R

В0.2 CO. 9

Рис. 5.9. Полностью упрощенная диаграмма запроса с коэффициентами фильтрации

для общего предка

На практике вы обычно можете начать с упрощенной диаграммы запроса и затем по необходимости добавлять детали. Если план исполнения (о том, как его найти, я расскажу в главе 6), найденный из этой упрощенной задачи, выполняется настолько быстро, что дальнейшие улучшения бессмысленны, то работу можно считать законченной. Вы можете удивиться, узнав, как часто это случается. Например, пакетный запрос, который выполняется за несколько секунд несколько
Упражнения

153

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

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

Упражнения

1. Создайте диаграмму для следующего запроса:

SELECT ...

FROM Customers С. ZIP_Codes Z1 ZIP Demographics D. Regions R WHERE C.ZIP_Code - Z.ZIP_Code AND Z.Demographic_ID - D.Demographic_ID AND Z.Region_ID - R.Region_ID AND C.Active_Flag - 'Y'

AND C.Profiled_Flag - 'N'

AND R.Name - 'SOUTHWEST'

AND D.Name IN ('YUPPIE'. '0LDM0NEY');

Сделайте обычные предположения об именах первичных ключей, кроме первичного ключа ZIP_Codes, который является таблицей ZIP_Codes. Обратите внимание, что столбцы Name в REGIONS и ZI P_Demogгаphі Cs имеют уникальные индек-
154

5. Диаграммное изображение простых запросов SQL

сы. В таблице Customers 5 ООО ООО строк, в таблице Z і p Codes 250 ООО строк, в таблице ZIPJIemographi cs 20 строк, и в таблице Regi ons 5 строк. Предполагается, что внешние ключи никогда не равны nul 1 и всегда указывают на допустимые первичные ключи. Следующий запрос возвращает 2 ООО ООО строк:

SELECT COUNTC*) FROM Customers С WHERE ActiveJlag = 'Y' AND ProfiledJlag = 'N1:

2. Создайте диаграмму для следующего запроса:

SELECT ...

FROM Regions R. ZipJodes Z. Customers С. CustomerJIailings CM,

Mailings M1 Catalogs Cat. Brands B WHERE R.Region_ID(+) = Z.Region ID AND Z.ZIP_Code(+) = C.ZIPJode AND C.CustomerJD = CM.CustomerJD AND CM.MailingJD = M.MailingJD AND M.CatalogJD = Cat.CatalogJD AND Cat.BrandJD = B.BrandJD AND B.Name = 'OhSoGreen'

AND M.MailingJate >= SYSDATE-365 GROUP BY... ORDER BY ...

Начните с тех же предположений и статистики, что и в упражнении I. В таблице CustomerJIailings находится 30 000 000 строк. В таблице Mailings— 40 000 строк. В Catalogs 200 строк. В Brands 12 строк и есть альтернативный уникальный ключ по Name. Следующий запрос возвращает 16 ООО строк:
Предыдущая << 1 .. 72 73 74 75 76 77 < 78 > 79 80 81 82 83 84 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100