关于数据库:KunlunDB功能之insertupdatedeletereturning语句

41次阅读

共计 1760 个字符,预计需要花费 5 分钟才能阅读完成。

在一些业务场景中,用户须要插入、更新、删除一行或者多行指标数据行,而后取得本人刚刚插入、更新、删除之后的行或者其局部字段的值,包含局部字段形成的任意非法的表达式的值。

对于 MySQL 用户来说,要做到这一点,用户通常须要在一个显式的事务中执行 update 语句,而后应用雷同的查问条件把 update 的语句取出来。

之所以要在显式事务中做,是为了避免其余并发的事务 update 了本连贯刚刚 update 的行,那样的话,随后的 select 语句失去行就不是本连贯刚刚 update 之后的行了,因为这些行又被其余事务更新过了。

而在 Oracle 和 PostgreSQL 数据库中,用户能够应用 update/delete 语句的 returning 子句,用一条语句实现上述工作。

这样的益处是能够晋升效率,省去的开销包含发送一条 select 语句以及做指标行的查找等工作;省去的开销还包含操作显式事务的开销,也就是发送 begin 和 commit 语句的开销。

因而,应用 update…returning 语句预期能够比在显式事务中 update 行,而后 select 进去,可能晋升性能 10% 以上。

所以这是一个很好的性能。事实上如果你搜寻 “mysql update returning”,你还能搜到不少在 MySQL 中实现相似 oracle/postgresql 的单条 update/delete 语句的 returning 子句的文章,通过借助触发器和长期表等技巧和简单的操作。

然而这些简单的步骤导致语句执行效率也显著升高了,并且应用也不不便(须要对每个数据表创立触发器)。

为了晋升用户的程序效率,升高用户的开发难度,晋升用户应用 KunlunDB 的体验,咱们在 KunlunDB 中也实现 insert/update/delete 语句的 returning 子句。

为此,咱们在 kunlun-storage 中实现了 insert/update/delete… returning 语句供计算节点应用,并且在计算节点中基于 PostgreSQL 原有的 insert/update/delete…returning 语句的实现,退出了对近程数据读写的反对。

这样,KunlunDB 就具备了 insert…returning、update…returning 和 delete…returning 语句性能,别离返回 insert 语句插入的行,update 语句更新后的行,以及返回 delete 语句删除的行,包含这些行的字段组成的任意非法的表达式的值。用户曾经能够在 KunlunDB 上应用这些性能。

下图展现了这个很 cool 的性能。

首先,建表并填充数据:

当初咱们执行 update… returning 语句:

而后执行 delete… returning 子句:

最初,explain 一下 update/delete… returning 子句:

-END-

昆仑数据库是一个 HTAP NewSQL 分布式数据库管理系统,能够满足用户对海量关系数据的存储管理和利用的全方位需要。
利用开发者和 DBA 的应用昆仑数据库的体验与单机 MySQL 和单机 PostgreSQL 简直完全相同,因为首先昆仑数据库反对 PostgreSQL 和 MySQL 双协定,反对规范 SQL:2011 的 DML 语法和性能以及 PostgreSQL 和 MySQL 对规范 SQL 的扩大。同时,昆仑数据库集群反对程度弹性扩容,数据主动拆分,分布式事务处理和分布式查询处理,强壮的容错容灾能力,欠缺直观的监测剖析告警能力,集群数据备份和复原等 罕用的 DBA 数据管理和操作。所有这些性能无需任何利用零碎侧的编码工作,也无需 DBA 人工染指,不停服不影响业务失常运行。
昆仑数据库具备全面的 OLAP 数据分析能力,通过了 TPC- H 和 TPC-DS 规范测试集,能够实时剖析最新的业务数据,帮忙用户发掘出数据的价值。昆仑数据库反对私有云和公有云环境的部署,能够与 docker,k8s 等云基础设施无缝合作,能够轻松搭建云数据库服务。
请拜访 http://www.zettadb.com/ 获取更多信息并且下载昆仑数据库软件、文档和材料。
KunlunDB 我的项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb

正文完
 0