传统数据库中outer表一条记录,然后去inner表中去cache中查询这个相关记录,一行一行的匹配。但是tidb是分布式架构而且存算分离,如果还是一行一行的去查找那就要去tikv中查找,中间经过大量网络交互。因此TiDB做了一些优化:1、将一行一行改为一批一批,也就是由Row改为chunk的方式。在不考虑并行的情况下,outer表先获取一个chunk的数据(这个chunk由小变大),然后再进行过滤+去重+排序等操作形成一堆keyRange,然后交给tidb后端进行组织加工成cop_task任务,发给tikv执行,但是tikv获取了一个outer表的chunk对应的所有数据以后,这些数据并不能确定和outer表的这个chunk的哪些记录对应啊,因此就通过hash table的方式来组织,来让outer表的chunk和inner表取过来的数据进行查找。
简单来说就是:传统数据库中不需要做hash table是因为outer表就是一行数据,直接匹配即可。tidb是chunk组织,需要走类似于走小表hash join的方式。