Можно ли использовать MySQL's Hash Join?

Можно ли использовать MySQL's Hash Join?

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

Функция хеш-соединения MySQL была официально запущена в версии 8.0.18. Первоначальная функция поддерживает только внутреннее соединение, а другие типы соединений будут поддерживаться в ближайшее время. (Нет доказательств зря, в доказательство есть фотографии!)

Можно ли использовать MySQL's Hash Join?

https://dev.mysql.com/worklog/

Вот краткое введение в реализацию хеш-соединения MySQL в различных типах соединений.

внутреннее соединение:

  • Классическое хеш-соединение : классический алгоритм хеш-соединения делится на два этапа: построение и обнаружение.

Этап построения : укажите одну из двух таблиц, которые должны быть соединены, как таблицу «построения», считайте таблицу в память для создания хэш-таблицы и вычислите значение хеш-функции на основе свойств соединения таблицы. Например:

SELECT * FROM t1 JOIN t2 on (t1.id = t2.id); Предполагая, что t1 указан как таблица построения, t1.id используется для вычисления хеш-значения.

Фаза обнаружения : другая таблица в соединении используется в качестве входных данных для фазы обнаружения. Хеш-значение (с использованием t2.id) вычисляется с помощью атрибута соединения таблицы. Каждая строка данных использует свое хеш-значение для хеш-таблицы в память для поиска.Если запись совпадает, вывести результат.

Использование классического алгоритма требует, чтобы все построенные таблицы были прочитаны в память. Если они не могут быть прочитаны в память, они будут прочитаны несколько раз, что приведет к многократным операциям чтения на этапе обнаружения. Поэтому классический алгоритм не очень идеален.

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

Внутреннее неравномерное соединение: используйте хеш-соединение для выполнения этого типа запроса, который будет перекрестно соединять две соединенные таблицы, а затем использовать условие в качестве фильтра.

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

Antijoin: очень похоже на Semijoin, за исключением того, что вывод не соответствует результатам.

Левое внешнее соединение: таблица справа от левого соединения является таблицей построения. Используйте атрибут соединения для вычисления хэш-значения, а затем используйте атрибут соединения таблицы слева для вычисления хэш-значения, выполните поиск в хэш-таблице, если он совпадает, выведите запись соединения, в противном случае выведите NULL.

Правое внешнее соединение: метод выполнения противоположен таковому при левом соединении.

Можно ли использовать MySQL's Hash Join?

Можно ли использовать MySQL's Hash Join?
Можно ли использовать MySQL's Hash Join?
Может ли хеш-соединение работать? Насколько оно эффективно? Судя по отзывам многих людей, использование хэш-соединения для сравнения производительности предыдущего запроса значительно улучшилось, но в некоторых случаях это приведет к чрезмерному потреблению ресурсов. Причина в том, что оптимизатор все еще Часть хеш-соединения не изменяется, и она по-прежнему рассматривается как BNL. Поэтому появились нежелательные состояния оптимизации, и эта проблема будет решена в дальнейшей работе. А пока вы можете обратиться к предложениям по статьям Е Чжинжун.

https://mp.weixin.qq.com/s/gYledARCZHvrlnCEmh2mtw

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

рекомендация

отblog.51cto.com/15080016/2642081