4.2.2 主键模型的 Update 更新¶
主要讲述如何使用 Update 命令来更新 Doris 中的数据。 Update 命令只能在 Unique 数据模型的表中执行。
1 适用场景¶
-
对满足某些条件的行,修改其取值
-
这个适合少量数据,不频繁的更新
2 基本原理¶
利用查询引擎自身的 where 过滤逻辑,从待更新表中筛选出需要被更新的行。再利用 Unique 模型自带的 Value 列新数据替换旧数据的逻辑,将待更新的行变更后,再重新插入到表中,从而实现行级别更新。
2.1 同步¶
Update 语法在 Doris 中是一个同步语法,即 Update 语句执行成功,更新操作也就完成了,数据是可见的。
2.2 性能¶
Update 语句的性能和待更新的行数以及 condition 的检索效率密切相关。
-
待更新的行数:待更新的行数越多,
Update语句的速度就会越慢。Update更新比较合适偶发更新的场景,比如修改个别行的值。Update并不适合大批量的修改数据。 -
condition的检索效率:Update实现原理是先将满足condition的行做读取处理,所以如果condition的检索效率高,则Update的速度也会快。condition列最好能命中索引或者分区分桶裁剪,这样Doris就不需要扫全表,可以快速定位到需要更新的行,从而提升更新效率。强烈不推荐condition列中包含value列。
3 使用示例¶
假设 Doris 中存在一张订单表,其中订单 id 是 Key 列,订单状态,订单金额是 Value 列。数据状态如下:
| 订单 id | 订单金额 | 订单状态 |
|---|---|---|
| 1 | 100 | 待付款 |
| SQL | |
|---|---|
1 2 3 4 5 6 | |
这时候,用户点击付款后, Doris 系统需要将订单 id 为 '1' 的订单状态变更为 '待发货' ,就需要用到 Update 功能。
| SQL | |
|---|---|
1 2 3 | |
更新后结果如下
| SQL | |
|---|---|
1 2 3 4 5 6 | |
4 更多帮助¶
关于数据更新使用的更多详细语法,请参阅 UPDATE 命令手册,也可以在 MySQL 客户端命令行下输入 HELP UPDATE 获取更多帮助信息。