Prepared Statement是一种二进制的哀求交互协议,可以大大低落体系的交互本钱。OceanBase不只支持用户措施与数据库间行使Prepared Statement, 也支持在存储进程引擎挪用SQL引擎执行时行使这种交互方法。存储进程在对SQL举办一次Prepare操纵并获取独一id后, 后续的每次执行仅必要传入该id和对应的参数,体系可以通过高速缓存找到对应的存储进程或SQL打算开始执行。该进程对比行使SQL文本的交互方法,省去了大量哀求文本理会的CPU开销。
OceanBase内部实现了高速缓存来缓存存储进程的可执行代码及SQL执行打算,差异参数的存储进程和SQL可以通过这一高速缓存快速获取必要的执行工具, 耗时一样平常在几十微秒以内, 有用停止了从头编译带来的毫秒级的耽误和CPU耗损。
可更新视图
在OLTP场景中,通过镌汰应用与数据库的交互次数来实现机能晋升的例子许多,可更新视图就是个中之一。我们常见的数据库视图凡是是只读的,通过界说视图,用户可以界说本身感乐趣的数据以及其获取接口,但视图同时也可以作为更新操纵的进口,好比在TPC-C的new order建设场景中,应用必要获得商品信息,更新库存并获得更新后的值。一样平常可以通过两条SQL实现这一进程:
select i_price,i_name, i_data from item where i_id = ?; UPDATE stock SET s_order_cnt = s_order_cnt + 1, s_ytd = s_ytd + ?, s_remote_cnt = s_remote_cnt + ?, s_quantity = (CASE WHEN s_quantity< ? + 10 THEN s_quantity + 91 ELSE s_quantity END) - ? WHERE s_i_id = ? AND s_w_id = ? RETURNING s_quantity, s_dist_01, CASE WHEN i_data NOT LIKE'%ORIGINAL%' THEN 'G' ELSE (CASE WHEN s_data NOT LIKE '%ORIGINAL%' THEN 'G'ELSE 'B' END) END BULK COLLECT INTO ...;
但通过成立一个可更新视图:
CREATE VIEW stock_item AS SELECT i_price, i_name, i_data, s_i_id,s_w_id, s_order_cnt, s_ytd, s_remote_cnt, s_quantity, s_data, s_dist_01 FROM stock s, item i WHERE s.s_i_id =i.i_id;
我们就可以通过一条语句更新库存并获得商品和库存信息:
UPDATE stock_item SET s_order_cnt = s_order_cnt + 1, s_ytd = s_ytd + ?, s_remote_cnt = s_remote_cnt + ?, s_quantity = (CASE WHEN s_quantity< ? + 10 THEN s_quantity + 91 ELSE s_quantity END) - ? WHERE s_i_id = ? AND s_w_id = ? RETURNING i_price, i_name, s_quantity,s_dist_01, CASE WHEN i_data NOT LIKE'%ORIGINAL%' THEN 'G' ELSE (CASE WHEN s_data NOT LIKE '%ORIGINAL%' THEN 'G'ELSE 'B' END) END BULK COLLECT INTO ...;
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|