OceanBase 数据库支持的 INTERSECT 算子包括 MERGE INTERSECT DISTINCT 和 HASH INTERSECT DISTINCT。

    如下示例中,Q1 对两个查询使用 INTERSECT 联接,c1 有可用排序,0 号算子生成了 MERGE INTERSECT DISTINCT 进行求取交集、去重。由于 c2 无可用排序,所以在 3 号算子上分配了 SORT 算子进行排序。算子执行时从左右子节点读取有序输入,利用有序输入进行 MERGE,实现去重并得到交集结果。

    上述示例中,执行计划展示中的 outputs & filters 详细列出了所有 INTERSECT 算子的输出信息如下:

    HASH INTERSECT DISTINCT

    1. obclient>EXPLAIN SELECT c2 FROM t1 INTERSECT SELECT c2 FROM t1\G;
    2. *************************** 1. row ***************************
    3. Query Plan:
    4. ================================================
    5. |0 |HASH INTERSECT DISTINCT| |2 |77 |
    6. |1 | TABLE SCAN |T1 |2 |37 |
    7. |2 | TABLE SCAN |T1 |2 |37 |
    8. ================================================
    9. -------------------------------------
    10. 0 - output([INTERSECT(T1.C2, T1.C2)]), filter(nil)
    11. 1 - output([T1.C2]), filter(nil),
    12. access([T1.C2]), partitions(p0)
    13. 2 - output([T1.C2]), filter(nil),

    上述示例的执行计划展示中的 outputs & filters 详细列出了 HASH INTERSECT DISTINCT 算子的输出信息,字段的含义与 MERGE INTERSECT DISTINCT 算子相同。