OceanBase 数据库支持的 INSERT 算子包括 INSERT 和 MULTI PARTITION INSERT。
INSERT 算子用于向数据表的单个分区中插入数据。
如下例所示,Q1 查询将值 (1, ‘100’) 插入到非分区表 t1 中。其中 1 号算子 EXPRESSION 用来生成常量表达式的值。
上述示例中,执行计划展示中的 outputs & filters 详细列出了 INSERT 算子的输出信息如下:
Q2 查询将值(2, ‘200’)、(3, ‘300’)插入到表 t1 中。
obclient>EXPLAIN INSERT INTO t1 VALUES (2, '200'),(3, '300')\G;
*************************** 1. row ***************************
Query Plan:
====================================
|ID|OPERATOR |NAME|EST. ROWS|COST|
------------------------------------
|0 |INSERT | |2 |1 |
|1 | EXPRESSION| |2 |1 |
====================================
Outputs & filters:
-------------------------------------
0 - output([__values.C1], [__values.C2]), filter(nil),
columns([{T1: ({T1: (T1.C1, T1.C2)})}]), partitions(p0)
1 - output([__values.C1], [__values.C2]), filter(nil)
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 算子的示例如下:
-
Q6:
obclient>EXPLAIN INSERT INTO t2 SELECT * FROM t3\G;
==============================================
|ID|OPERATOR |NAME|EST. ROWS|COST|
--------------------------------------------------
|0 |MULTI PARTITION INSERT| |100000 |117862|
|1 | EXCHANGE IN DISTR | |100000 |104060|
|2 | EXCHANGE OUT DISTR | |100000 |75662 |
|3 | SUBPLAN SCAN |VIEW1|100000 |75662 |
|4 | TABLE SCAN |T3 |100000 |61860 |
==================================================
Outputs & filters:
-------------------------------------
0 - output([VIEW1.C1], [VIEW1.C2]), filter(nil),
columns([{T2: ({T2: (T2.C1, T2.C2)})}]), partitions(p[0-9])
1 - output([VIEW1.C1], [VIEW1.C2]), filter(nil)
2 - output([VIEW1.C1], [VIEW1.C2]), filter(nil)
3 - output([VIEW1.C1], [VIEW1.C2]), filter(nil),
access([VIEW1.C1], [VIEW1.C2])
access([T3.C2], [T3.C1]), partitions(p0)