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

 

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

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

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 24 25 26 27 28 29 < 30 > 31 32 33 34 35 36 .. 161 >> Следующая


Как вы можете видеть, стоимость операции AND-EQU AL MERGE больше, чем применения многостолбцового индекса, но этот вариант может быть лучше, чем
Соединения

59

использование единственного одностолбцового индекса. Ho такой случай, то есть разумное предпочтение операции AND-EQUAL MERGE, очень редок. Практически всегда наиболее селективное условие по одному столбцу само по себе является прекрасным вариантом, и стоимость менее селективного сканирования диапазона индекса превышает экономию на доступе к таблице, либо добавленная стоимость операции AND-EQUAL MERGE оправдывает создание многостолбцового индекса. Если вы замечаете в плане выполнения операцию AND-EQUAL MERGE, практически всегда следует либо запретить использование менее селективного индекса, либо создать и использовать многостолбцовый индекс. Новый многостолбцовый индекс должен начинаться с наиболее селективного столбца, в нашем случае это будет поле Area Code, и чаще всего должен использоваться вместо любого одностолбцового индекса по этому столбцу.

Соединения

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

Типы соединений

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

SELECT ... FROM Orders. OrderDeta і I s:

Если фразы WHERE нет, то у базы данных также нет инструкций, как нужно скомбинировать строки из этих двух больших таблиц, и она делает простейшую вещь: возвращает все возможные комбинации строк из таблиц. Если у вас есть 1 ООО ООО заказов и 5 ООО ООО описаний заказов, то запрос вернет (если вы сможете дождаться) 5 ООО ООО ООО ООО строк! Это редко используемое и еще реже необходимое декартово соединение. Результат этого запроса — все возможные комбинации элементов из двух или более наборов — называется декартовым произведением. С точки зрения ведения бизнеса вам совершенно неинтересно комбинировать данные из заказов и описаний заказов, если они не имеют никакого отношения друг к другу. Если вы увидели в программе декартово соединение, практически всегда это ошибка.

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

Самое распространенное, но все так же очень редкое исключение из этого правила — это случай, когда одна из таблиц возвращает единственную строку. В этом случае запрос на декартово соединение можно рассматривать как бо." ее или менее разумную комбинацию результатов, полученных из запроса к одной строке и присос/ иненных для удобства к результатам логически независимого многострочного запроса.
60

2. Основы доступа к данным

Внутренние соединения

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

SELECT ... FROM Orders 0. Order_DetaiIs D WHERE O.Order_ID=D.Order_IO:

Или, если записать в новом стиле:

SELECT ... FROM Orders 0

INNER JOIN Order_Details 0 ON O.Order_ID=D.Order_IO:

Логически такую операцию можно считать декартовым произведением с фильтрованным результатом: «выдать все комбинации заказов и описаний, но удалить те комбинации, для которых идентификаторы заказов не совпадают». Такое соединение называется внутренним соединением. Даже в худших случаях базы данных практически всегда находят лучший способ поиска требуемых строк, чем метод решения «в лоб», когда сначала вычисляется декартово произведение, а потом из него удаляются составляющие, не отвечающие условиям запроса. И это замечательно, так как для получения многостороннего декартова произведения нескольких больших таблиц может потребоваться несколько лет, а то и вечность. Большинство соединений, например приведенное в примере, содержат условие равенства внешнего ключа в какой-то подчиненной таблице и первичного (уникального) ключа в главной таблице, но любое условие, в котором упоминают две или (реже) больше таблиц, является условием соединения.

С процедурной точки зрения у базы данных есть несколько способов соединить таблицы в указанных запросах наилучшим образом.

¦ Начать с главной таблицы и найти все соответствующие подчиненные данные.

¦ Начать с детальной таблицы и найти соответствующие главные строки.

¦ Получить оба набора строк независимо (но не при помощи декартова произведения) и каким-либо образом соединить их, соблюдая соответствие между значениями соединенных столбцов.
Предыдущая << 1 .. 24 25 26 27 28 29 < 30 > 31 32 33 34 35 36 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100