Не думаю, что это правда, что SQL лучше всего будет лучше обслуживать при полном сканировании таблиц. Это было бы действительно очевидно, если между ними есть внешний ключ, но даже в этом случае могут быть исключения.
Я думаю, что ключевой вопрос заключается в следующем: «какая доля строк из каждой таблицы должна быть включена в набор результатов?». Если ответ «100% от каждого», то у вас есть понятный случай для полного сканирования таблицы (и хеш-соединения).
Однако рассмотрим случай, когда таблицы A и B объединены, при этом таблица A содержит 5 строк с внешним ключом для таблицы B (родительской), содержащей миллион строк. Очевидно, что здесь вы будете искать полное сканирование A с присоединением вложенного цикла к B (столбец соединения в таблице B будет проиндексирован, потому что это должен быть первичный или уникальный ключ).
В случае ОП, похоже, вы ожидаете, что 100% строк будут возвращены из каждой таблицы. Я ожидаю увидеть полное сканирование обеих таблиц и хеш-соединение с доступом к транзакциям TRANSACTIONS (возможно, меньшего размера) в первую очередь и встроенным в хеш-таблицу Это был бы оптимальный метод соединения, и я бы просто искал ситуацию, когда TRANSACTIONS слишком велик для однопроходного хеш-соединения. Если при объединении происходит сбой на диске, это может вызвать проблемы с производительностью, и вам придется рассмотреть вопрос об увеличении выделения памяти или равномерном разделении двух таблиц, чтобы уменьшить требования к памяти.