Каково различие между хэшированием и слиянием (Oracle RDBMS)?

Я смог успешно подать заявку Шаблон Модуля JavaScript к Расширению приложение JS в моем предыдущем задании. Это обеспечило простой способ создать приятно инкапсулировавший код.

57
задан David Aldridge 18 September 2013 в 22:35
поделиться

2 ответа

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

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

(В до-10g внешние соединения от большой к маленькой таблице были проблематичными с производительностью - Поскольку оптимизатор не мог решить необходимость сначала получить доступ к меньшей таблице для хэш-соединения, а к большей таблице сначала для внешнего соединения. Следовательно, хеш-соединения были недоступны в этой ситуации).

Стоимость хеширования join можно уменьшить, разделив обе таблицы по ключу (-ам) соединения. Это позволяет оптимизатору сделать вывод, что строки из раздела в одной таблице найдут совпадение только в конкретном разделе другой таблицы, а для таблиц, имеющих n разделов, хеш-соединение выполняется как n независимых хеш-объединений. //download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523 inventory12.1 docs: https://docs.oracle.com/database/121/TGSQL/ tgsql_join.htm

73
ответ дан 24 November 2019 в 19:41
поделиться

​​Я просто хочу отредактировать это для потомков, что теги для oracle не были добавлены, когда я ответил на этот вопрос. Мой ответ был более применим к MS SQL.

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

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

7
ответ дан 24 November 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: