  It is crucial to provide real-time performance in many applications, such as
interactive and exploratory data analysis. In these settings, users often need
to view subsets of query results quickly. It is challenging to deliver such
results over large datasets for relational operators over multiple relations,
such as join. Join algorithms usually spend a long time on scanning and
attempting to join parts of relations that may not generate any result. Current
solutions usually require lengthy and repeated preprocessing, which is costly
and may not be possible to do in many settings. Also, they often support
restricted types of joins. In this paper, we outline a novel approach for
achieving efficient join processing in which a scan operator of the join learns
during query execution, the portions of its relations that might satisfy the
join predicate. We further improve this method using an algorithm in which both
scan operators collaboratively learn an efficient join execution strategy. We
also show that this approach generalizes traditional and non-learning methods
for joining. Our extensive empirical studies using standard benchmarks indicate
that this approach outperforms similar methods considerably.
