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

 

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

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

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


GROUP BY UPPER(SUBSTR(Fіrst_Name. I. 3)). UPPER(SUBSTR(Last_Name. I. 3)):

Al: 0.0002

Q2: SELECT COUNTC*) A2 FROM Customers:

A2: 5000000

Q3: SELECT COUNTC*) A3 FROM Orders WHERE Order Jlate > SYSDATE - 366:

A3: 1200000

Q4: SELECT COUNTC*) A4 FROM Orders:

A4: 4000000

Q5: SELECT COUNTC*) A5 FROM Orders 0, Customers C WHERE 0.CustomerJO = C.CustomerJD:

A5: 4000000

Q6: SELECT COUNTC*) A6 FROM OrderJletails;

A6: 12000000

Q7: SELECT COUNTC*) A7 FROM Orders 0. OrderJJetails OD WHERE 0D.OrderJD = 0.OrderJD:

A7: 12000000

Q8: SELECT COUNTC*) A8 FROM CodeJranslations WHERE CodeJype = ' 0RDER_STATUS':

A8: 4

Q9: SELECT COUNTC*) A9 FROM Orders 0. CodeJranslations OT WHERE 0.StatusJode = 0T.Code AND Code Type = ’ORDER_STATUS':

A9: 4000000

Q10: SELECT COUNTC*) AlO FROM Code Translations *

WHERE CodeJype = 'ORDERJlETAILJjTATUS':

AlO: 3

Qll: SELECT COUNTC*) AU FROM OrderJtetails DD. CodeJYanslations ODT WHERE 0D.StatusJode = ODT.Code AND CodeJype = 'ORDER DETAIL_STATUS':

All: 12000000

Начиная с коэффициентов фильтрации, получите средневзвешенный коэффициент фильтрации для условия по имени и фамилии покупателей (таблица Customers) напрямую из Al. Результат этого запроса равен 0,0002. Найдите коэффициент фильтрации для Orders как АЗ/А4, что в итоге дает 0,3. Так как для других псевдонимов фильтров нет, коэффициенты фильтрации для них равны 1,0, которые не нужно указывать на диаграмме запроса для соответствующих узлов.

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

147

полученных при соединении двух таблиц, на количество строк в нижней таблице (главной таблице в этом отношении). Коэффициенты для соединений от OD к О и ODT равны З (А7/А4) и 4 ООО ООО (А11/А10), соответственно.

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

Чтобы коэффициенты соединения поместились на диаграмму, я сокращу миллионы до m и тысячи до к, поэтому последний результат будет выглядеть как 4т.

Коэффициенты для соединений от 0 к С и ОТ равны 0,8 (А5/А2) и 1 ООО ООО (или 1ш, А9 / AB), соответственно.

Найдите главные коэффициенты соединения для нижних концов всех стрелок, обозначающих внутренние соединения, разделив количество строк, полученных при соединении, на количество строк в верхней таблице. Если у вас есть обязательные внешние ключи и обеспечена целостность ссылочных данных (внешние ключи всегда указывают на существующие значения первичного ключа), то главные коэффициенты соединения всегда в точности равны 1,0, что верно для всех случаев в нашем примере: А7/А6, А11/А6, А5/А4 и А9/А4.

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

Затем запишите все числа на диаграмме запроса, как показано на рис. 5.5.

OD

Рис. 5.5. Полная диаграмма запроса для второго примера

Сокращения

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

¦ Узнать, какие столбцы являются первичными ключами, обычно можно исходя из их имен.

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

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

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

ключа часто равно null или он часто указывает на более не существующие значения первичного ключа, просто игнорируйте его, подразумевая значение 1,0.

¦ В некоторых базах данных реализованы ограничения, которые строго гарантируют целостность ссылочных данных. Даже без таких ограничений хорошо построенные приложения поддерживают ссылочную целостность или хотя бы практически полную целостность в своих таблицах. Если вы гарантируете или хотя бы предполагаете ссылочную целостность, то можете предположить, что не равные null внешние ключи всегда указывают на допустимые первичные ключи. В этом случае для поиска фактора соединения не нужно выполнять (относительно медленный) запрос количества строк в присоединенной таблице. Вместо этого вам нужно знать лишь процент строк с не равным null внешним ключом и количество строк в двух таблицах. Чтобы подсчитать их, выполните подобный SQL-код:

SELECT COUNTC*) D. СОШТ(<Столбец_внешнего_ключа>) F FROM <Детальная_таблица>-,

SELECT C0UNT(*) M FROM <Гпавная_табпица>-,

Пусть первое количество строк, полученное первым запросом, равно D. Второе количество строк, полученное тем же запросом, равно F. Количество строк, полученное вторым запросом, равно М. Тогда главный коэффициент соединения равен F/D, а детальный коэффициент соединения — F М.
Предыдущая << 1 .. 69 70 71 72 73 74 < 75 > 76 77 78 79 80 81 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100