更新数据库牛逼到爆的MERGE INTO

    今天更新数据库的时候发现使用update set语句更新一百万条数据基本上不可能,就算时间允许,公司配的那台i3 5代处理器的thinkpad估计也不会同意的,只好咨询了下部门的部花冯老师,果不其然,只有你不问的,没有冯老师不知道的。

    冯老师墙裂推荐的MERGE INTO这个语句,更新速度秒杀我涨工资的速度,很是意外,具体使用如下:

MERGE INTO 目标表 A 
USING  源表 B
ON (A.参照字段 = B.参照字段)
WHEN MATCHED THEN
UPDATE SET A.更新字段 = B.更新字段;

100万条数据全部字段更新时间为97s,听说如果用update的话,处理时间应该是按天算的,具体可以等退休后测试。

Greenplum数据库中没有直接支持MERGE INTO语句的功能。然而,你可以使用其他方法来实现类似的效果。一种常见的方法是使用INSERT INTO和UPDATE语句结合使用。 首先,你可以使用INSERT INTO语句将数据插入到目标表中。如果目标表中已经存在相同的记录,则会引发唯一键冲突错误。在这种情况下,你可以使用UPDATE语句执行更新操作。 以下是一个示例,演示如何在Greenplum数据库中模拟MERGE INTO语句的功能: ```sql -- 创建目标表 CREATE TABLE target_table ( id INT PRIMARY KEY, value VARCHAR(255) ); -- 创建临时表存储要插入的数据 CREATE TEMPORARY TABLE temp_table ( id INT, value VARCHAR(255) ); -- 插入数据到临时表 INSERT INTO temp_table (id, value) VALUES (1, 'Value 1'), (2, 'Value 2'), (3, 'Value 3'); -- 将临时表中的数据插入到目标表中 INSERT INTO target_table (id, value) SELECT id, value FROM temp_table ON CONFLICT (id) DO UPDATE SET value = excluded.value; -- 删除临时表 DROP TABLE temp_table; ``` 在上面的示例中,我们首先创建了目标表和临时表。然后,我们将要插入的数据插入到临时表中。最后,我们使用INSERT INTO和SELECT语句将临时表中的数据插入到目标表中。如果插入过程中发生唯一键冲突,我们使用ON CONFLICT子句执行更新操作。 请注意,这只是一种模拟MERGE INTO语句的方法,并不是Greenplum数据库的官方支持。你可以根据自己的需求和具体的数据操作场景进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vllen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值