OceanBase 数据库支持的 INSERT 算子包括 INSERT 和 MULTI PARTITION INSERT。

    INSERT 算子用于向数据表的单个分区中插入数据。

    如下例所示,Q1 查询将值 (1, ‘100’) 插入到非分区表 t1 中。其中 1 号算子 EXPRESSION 用来生成常量表达式的值。

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

    • Q2 查询将值(2, ‘200’)、(3, ‘300’)插入到表 t1 中。

      1. obclient>EXPLAIN INSERT INTO t1 VALUES (2, '200'),(3, '300')\G;
      2. *************************** 1. row ***************************
      3. Query Plan:
      4. ====================================
      5. |ID|OPERATOR |NAME|EST. ROWS|COST|
      6. ------------------------------------
      7. |0 |INSERT | |2 |1 |
      8. |1 | EXPRESSION| |2 |1 |
      9. ====================================
      10. Outputs & filters:
      11. -------------------------------------
      12. 0 - output([__values.C1], [__values.C2]), filter(nil),
      13. columns([{T1: ({T1: (T1.C1, T1.C2)})}]), partitions(p0)
      14. 1 - output([__values.C1], [__values.C2]), filter(nil)
      15. values({2, '200'}, {3, '300'})
    • Q3 查询将子查询 SELECT * FROM t3 的结果插入到表 t1 中。

    MULTI PARTITION INSERT

    MULTI PARTITION INSERT 算子用于向数据表的多个分区中插入数据。

    如下例所示,Q5 查询将值(2, ‘200’)、(3, ‘300’)插入到分区表 t2 中,通过 partitions 可以看出,这些值会被插入到 t2 的 p0 和 p6 分区。

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

    更多 MULTI PARTITION INSERT 算子的示例如下:

      1. Q6:
      2. obclient>EXPLAIN INSERT INTO t2 SELECT * FROM t3\G;
      3. ==============================================
      4. |ID|OPERATOR |NAME|EST. ROWS|COST|
      5. --------------------------------------------------
      6. |0 |MULTI PARTITION INSERT| |100000 |117862|
      7. |1 | EXCHANGE IN DISTR | |100000 |104060|
      8. |2 | EXCHANGE OUT DISTR | |100000 |75662 |
      9. |3 | SUBPLAN SCAN |VIEW1|100000 |75662 |
      10. |4 | TABLE SCAN |T3 |100000 |61860 |
      11. ==================================================
      12. Outputs & filters:
      13. -------------------------------------
      14. 0 - output([VIEW1.C1], [VIEW1.C2]), filter(nil),
      15. columns([{T2: ({T2: (T2.C1, T2.C2)})}]), partitions(p[0-9])
      16. 1 - output([VIEW1.C1], [VIEW1.C2]), filter(nil)
      17. 2 - output([VIEW1.C1], [VIEW1.C2]), filter(nil)
      18. 3 - output([VIEW1.C1], [VIEW1.C2]), filter(nil),
      19. access([VIEW1.C1], [VIEW1.C2])
      20. access([T3.C2], [T3.C1]), partitions(p0)