Программирование >>  Полное сканирование таблицы 

1 ... 15 16 17 [ 18 ] 19 20 21 ... 107


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

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

Соединения с сортировкой слиянием

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

Основной набор строк

Присоединяемый набор строк


> Соединенные строки

Рис. 2.9. Соединение с сортировкой слиянием



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

Резюме

Резюмируя, можно сказать, что следует всегда выбирать вложенные циклы, чтобы добиться производительности и надежности. Иногда можно получить дополнительные преимущества, используя соединение хэшированием, когда независимый доступ к двум таблицам существенно улучшает производительность, а риск снижения надежности мал. Никогда не выбирайте соединение с сортировкой слиянием, разве что для случая, когда больше подошло бы соединение хэшированием, но реализовать его невозможно (например, как в случае синтаксического оптимизатора Oracle). В следующих главах я буду считать соединение методом вложенных циклов выбором по умолчанию. Правила, объясняющие, в каких случаях можно получить преимущества, выбрав другие варианты, сложны, и в них используется материал дальнейших глав. Главным назначением этого раздела было объяснить операции, которые выполняются внутри базы данных и представляют собой основу для дальнейшего обсуждения.



Просмотр

и интерпретация

планов выполнения

в этой главе излагается основной материал, касающийся создания и чтения планов выполнения SQL-запросов. Он не является критичным, то есть вы не должны обязательно читать эту главу, чтобы понять материал остальных глав книги. Все производители серверов баз данных предлагают спещ1альные инструменты создания и просмотра планов выполнения, зачастую обладающие удобным графическим интерфейсом. Также существуют популярные утилиты сторонних производителей, например TOAD. Если у вас есть доступ к таким хорошо документированным утилитам и вы знаете, как с ними работать, то эту главу можно пропустить или быстро просмотреть. Эта глава не предназначена для замены или дополнения специализированных утилит или их документации. Нет, я описываю самые основные методы создания и чтения планов вьшолнения, методы, которые гарантированно доступны вам вне зависимости от того, какие утилиты есть в вашем арсенале. Эти базовые методы особенно полезно знать, если вы работаете в разнотипных средах разработки, где нельзя рассчитывать на постоянное и немедленное наличие специализированных инструментов. Если у вас уже есть более сложные методы и вы умеете использовать их, то вам не потребуются мои методы (и, возможно, вы их не захотите изучать). За время моей работы с разнообразными серверами баз данных я никогда не беспокоился о наличии сложных инструментов. Я обнаружил, что если знать, какой план вьшолнения тебе нужен и как его получить, для эффективной работы всегда хватит простых инструментов, интегрированных в базу данных. Чтение плана вьшолнения - это лишь быстрая проверка, использует ли база данных действительно нужный разработчику план.

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



1 ... 15 16 17 [ 18 ] 19 20 21 ... 107

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика