TABLE LOOKUP 算子用于表示全局索引的回表逻辑。

    示例:全局索引回表

    1. obclient>CREATE TABLE t1(c1 INT PRIMARY KEY, c2 INT, c3 INT) PARTITION BY
    2. HASH(c1) PARTITIONS 4;
    3. Query OK, 0 rows affected (0.12 sec)
    4. obclient>CREATE INDEX i1 ON t1(c2) GLOBAL;
    5. Query OK, 0 rows affected (0.12 sec)
    6. obclient>EXPLAIN SELECT * FROM t1 WHERE c2 = 1\G;
    7. *************************** 1. row ***************************
    8. Query Plan:
    9. | ========================================
    10. |ID|OPERATOR |NAME |EST. ROWS|COST |
    11. ----------------------------------------
    12. |0 |TABLE LOOKUP|t1 |3960 |31065|
    13. |1 | TABLE SCAN |t1(i1)|3960 |956 |
    14. ========================================
    15. Outputs & filters:
    16. -------------------------------------
    17. 0 - output([t1.c1], [t1.c2], [t1.c3]), filter(nil),
    18. partitions(p[0-3])
    19. 1 - output([t1.c1]), filter(nil),
    20. access([t1.c1]), partitions(p0)

    上述示例中,1 号算子是扫描全局索引 i1, 0 号算子表明从主表中获取不在全局索引的列。执行计划展示中的 outputs & filters 详细展示了 TABLE LOOKUP 算子的输出信息如下:

    信息名称

    含义

    output

    该算子的输出列。

    filter

    该算子的过滤谓词。

    由于示例中 TABLE LOOKUP 算子没有设置 filter,所以为 nil。

    partitions

    查询需要扫描的分区。