返回首页

gbase数据、南大通用产品文档:GBase8a快速UPDATE 模式

更新日期:2024年09月11日

说明
快速UPDATE 模式,
即先删除符合更新条件的数据,
然后再向表的末尾插入需要更
新的新数据。
相对于传统的行存储数据库来说,
列存储的数据中UPDATE 更新少量行时,
操作效
率相对来说是耗时的,因此,GBase UP 针对此特点,专门设计了快速UPDATE 模
式,用以提高数据更新操作。
快速UPDATE 模式目前只支持针对表对象的操作。
要使用快速UPDATE 模式,必须在客户端使用SET gbase_fast_update =1;的命令打
开快速UPDATE 模式。更新大批量数据的时候建议使用默认UPDATE 模式,更新
少量数据的时候建议使用快速UPDATE 模式。
SET gbase_fast_update =0;表示关闭快速UPDATE 模式。
SET gbase_fast_update =1;表示开启快速UPDATE 模式。
示例

示例1:开启快速UPDATE 模式。
gbase> CREATE TABLE t1 (f_1 int);
Query OK, 0 rows affected

gbase> INSERT INTO t1 values(1),(2),(3);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0

gbase> SELECT * FROM t1;
+------+
| f_1 |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set

gbase> SET gbase_fast_update = 1;
Query OK, 0 rows affected

gbase> UPDATE t1 SET f_1 = 10 WHERE f_1= 1;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 701
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0

gbase> SELECT * FROM t1;
+------+
| f_1 |
+------+
| 2 |
| 3 |
| 10 |
+------+
3 rows in set

子查询表达式主要有以下几种:

EXISTS/NOT EXISTS
EXISTS/NOT EXISTS 的语法图请参见图6-8。
图6-8 EXISTS/NOT EXISTS::=
EXISTS 的参数是一个任意的SELECT 语句,或者说子查询。系统对子查询进行运算以
判断它是否返回行。如果它至少返回一行,则EXISTS 结果就为“真”
;如果子查询没有返
回任何行,EXISTS 的结果是“假”

这个子查询通常只是运行到能判断它是否可以生成至少一行为止,而不是等到全部结
束。
示例:
gbase=# SELECT sr_reason_sk,sr_customer_sk FROM public.store_returns WHERE
EXISTS (SELECT d_dom FROM public.date_dim WHERE d_dom =
store_returns.sr_reason_sk and sr_customer_sk <10);
sr_reason_sk | sr_customer_sk
--------------+----------------
13 |
2
22 |
5
17 |
7
25 |
7
3 |
7
31 |
5
7 |
7
14 |
6

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
604
20 |
4
5 |
6
10 |
3
1 |
5
15 |
2
4 |
1
26 |
3
(15 rows)

IN/NOT IN
IN/NOT IN 的语法请参见图6-9。
图6-9 IN/NOT IN::=
右边是一个圆括弧括起来的子查询,
它必须只返回一个字段。
左边表达式对子查询结果
的每一行进行一次计算和比较。如果找到任何相等的子查询行,则IN 结果为“真”
。如果没
有找到任何相等行,则结果为“假”
(包括子查询没有返回任何行的情况)

表达式或子查询行里的NULL 遵照SQL 处理布尔值和NULL 组合时的规则。
如果两个
行对应的字段都相等且非空,
则这两行相等;
如果任意对应字段不等且非空,
则这两行不等;
否则结果是未知
(NULL)

如果每一行的结果都是不等或NULL ,
并且至少有一个NULL ,
则IN 的结果是NULL 。
示例:
gbase=# SELECT sr_reason_sk,sr_customer_sk
FROM public.store_returns WHERE
sr_customer_sk IN (SELECT d_dom FROM public.date_dim WHERE d_dom < 10);
sr_reason_sk | sr_customer_sk
--------------+----------------
10 |
3
26 |
3
22 |
5
31 |
5
1 |
5
32 |
5

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
605
32 |
5
4 |
1
15 |
2
13 |
2
33 |
4
20 |
4
33 |
8
5 |
6
14 |
6
17 |
7
3 |
7
25 |
7
7 |
7
(19 rows)

ANY/SOME
ANY/SOME 的语法图请参见图6-10。
图6-10 any/some::=
右边是一个圆括弧括起来的子查询,它必须只返回一个字段。左边表达式使用operator
对子查询结果的每一行进行一次计算和比较,
其结果必须是布尔值。
如果至少获得一个真值,
则ANY 结果为“真”
。如果全部获得假值,则结果是“假”
(包括子查询没有返回任何行的
情况)
。SOME 是ANY 的同义词。IN 与ANY 可以等效替换。
示例:
gbase=# SELECT sr_reason_sk,sr_customer_sk
FROM public.store_returns WHERE
sr_customer_sk < ANY (SELECT d_dom FROM public.date_dim WHERE d_dom < 10);
sr_reason_sk | sr_customer_sk
--------------+----------------
26 |
3
17 |
7
32 |
5
32 |
5
13 |
2

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
606
31 |
5
25 |
7
5 |
6
7 |
7
10 |
3
1 |
5
14 |
6
4 |
1
3 |
7
22 |
5
33 |
4
20 |
4
33 |
8
15 |
2
(19 rows)

ALL
ALL 的语法请参见图6-11。
图6-11 all::=
右边是一个圆括弧括起来的子查询,它必须只返回一个字段。左边表达式使用operator
对子查询结果的每一行进行一次计算和比较,其结果必须是布尔值。如果全部获得真值,
ALL 结果为“真”
(包括子查询没有返回任何行的情况)
。如果至少获得一个假值,则结果
是“假”

示例:
gbase=# SELECT sr_reason_sk,sr_customer_sk
FROM public.store_returns WHERE
sr_customer_sk < all(SELECT d_dom FROM public.date_dim WHERE d_dom < 10);
sr_reason_sk | sr_customer_sk
--------------+----------------
(0 rows)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
607

函数说明

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
808
返回date 中对应的月份,并以英文名称显示。
示例
示例1:返回8 月对应的英文名称。
gbase> SELECT MONTHNAME('2020-08-30') FROM dual;
+-------------------------+
| MONTHNAME('2020-08-30') |
+-------------------------+
| August
|
+-------------------------+
1 row in set