# `TiFlash MPP` Operators in the Execution Plan - Cont'd

+ An overview of a table join operation:
  + 1. `TableFullScan_31`: The `emp` table is scanned in its entirety.
  + 2. `ExchangeSender_32`: The entire `emp` table is broadcast to each TiFlash node.
  + 3. `ExchangeReceiver_33 (Build)`: Each TiFlash node receives the `emp` table that was broadcasted.
  + 4. `TableFullScan_34 (Probe)`: Each TiFlash node scans its portion of the `sal` table.
  + 5. `HashJoin_8`: Within each TiFlash node, a hash join is performed between the broadcasted `emp` table and the locally stored `sal` table.
  + 6. `ExchangeSender_35`: Each TiFlash node sends the join results to the TiDB Server.
  + 7. `TableReader_36`: The TiDB Server performs the final aggregation.

```
EXPLAIN SELECT * FROM employees emp, salaries sal WHERE emp.emp_no=sal.emp_no;
+---------------------------------+------------+--------------+---------------+--------------------------------------------------------------------+
| id                              | estRows    | task         | access object | operator info                                                      |
+---------------------------------+------------+--------------+---------------+--------------------------------------------------------------------+
| TableReader_36                  | 2825288.58 | root         |               | MppVersion: 1, data:ExchangeSender_35                              |
| └─ExchangeSender_35             | 2825288.58 | ~!@mpp[tiflash]@!~ |               | ExchangeType: PassThrough                                          |
|  └─HashJoin_8                   | 2825288.58 | ~!@mpp[tiflash]@!~ |               | inner join, equal:[eq(employees.emp.emp_no, employees.sal.emp_no)] |
|   ├─ExchangeReceiver_33(Build)  | 300024.00  | ~!@mpp[tiflash]@!~ |               |                                                                    |
|   │└─ExchangeSender_32          | 300024.00  | ~!@mpp[tiflash]@!~ |               | ExchangeType: Broadcast, Compression: FAST                         |
|   │ └─TableFullScan_31          | 300024.00  | ~!@mpp[tiflash]@!~ |   table:emp   | keep order:false                                                   |
|   └─TableFullScan_34(Probe)     | 2844047.00 | ~!@mpp[tiflash]@!~ |   table:sal   | keep order:false                                                   |
+---------------------------------+------------+--------------+---------------+--------------------------------------------------------------------+
7 rows in set, 1 warning (0.00 sec)
```

------------------------------------------------------------------------------
Here's an overview of a table join operation:

1. `TableFullScan_31`: The `emp` table is scanned in its entirety.
2. `ExchangeSender_32`: The entire `emp` table is broadcast to each TiFlash node, as indicated by the `Broadcast Hash Join` algorithm.
3. `ExchangeReceiver_33 (Build)`: Each TiFlash node receives the `emp` table that was broadcasted.
4. `TableFullScan_34 (Probe)`: Each TiFlash node scans its portion of the `sal` table.
5. `HashJoin_8`: Within each TiFlash node, a hash join is performed between the broadcasted `emp` table and the locally stored `sal` table.
6. `ExchangeSender_35`: Each TiFlash node sends the join results to the TiDB Server.
7. `TableReader_36`: The TiDB Server performs the final aggregation.

This sequence ensures efficient distribution and processing of data across the nodes and completes the join operation.