Index Lookup Join

IndexLookUpJoin Struct

主要流程

执行index lookup join时候,会启动一个outerWorker go routine和多个innerWorker go routine, go routine之间通过innerCh和resultCh来协作, 他们关系如下:

  • outerWorker 负责读取probe side 数据,然后建立map,创建完毕后,将task 同时放入innerCh中和resultCh
  • innerWorker 从innerCh取task,去inner表取数据,执行完毕后,将task的doneCh close用以通知Main线程(执行IndexLookupJoin.Next的groutine)
  • 调用IndexLookupJoin.Next的groutine从 resultCh中取一个task, 然后等待task执行完毕,执行完毕后做join, 将数据返回给上层调用者。

buildTask

buildTask builds a lookUpJoinTask and read outer rows.

When err is not nil, task must not be nil to send the error to the main thread via task.

handleTask

buildExecutorForIndexJoin

buildExecutorForIndexJoin

参考资料

  1. TiDB 源码阅读系列文章(十一)Index Lookup Join
  2. wikipedia: Nested_loop_join