一个有意思的问题:oracle中update单个列和多个列性能对比

我看见佛 2017-12-13 06:04:57
方式一:
update tbareainfo set areaname = :areaname, province = :province, updversion = :updversion  1 
where areaid = :areaid and updversion = :updversion

方式二:
update tbareainfo set areaname = :areaname, province = :province, city = :city, ofserver = :ofserver, 
ofsite = :ofsite, exptype = :exptype, memotext = :memotext, updversion = :updversion 1
where areaid = :areaid and updversion = :updversion

------------------------------------------------------------------------------------------------------------------------------------
方式二:用户即使更新了一个字段,或全部字段,都会把整行的数据提交上来用绑定变量覆盖更新;
即客户端发给数据库的SQL都是固定的.
更新的字段很多(但可能只更新了某一个或几个字段),减少了SQL的硬解析。
------------------------------------------------------------------------------------------------------------------------------------
方式一:根据用户实际修改的字段来确定set中的字段个数,比如修改了areaname,则
update set areaname = :areaname where xxxx=xxx
修改了province ,和city
update set province = :province,city=:city where xxxx=xxx
更新的字段少了,但是增加了SQL的硬解析。

请问这两种方式的优缺点是什么呢?性能有什么区别?
...全文
769 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2017-12-14
  • 打赏
  • 举报
回复
这种多所谓多增加的硬解析能有多少?想想总共where条件字段组合能有几种情况?硬解析是个问题,但也只有极频繁的硬解析才可能造成问题。 如果想知道到底有能有多大的收益,LR跑压力测试吧,看看TPS如何,测试时段的AWR也可以拿下,比较下单位时间的硬解析能差多少
我看见佛 2017-12-14
  • 打赏
  • 举报
回复
引用 4 楼 jdsnhan 的回复:
[quote=引用 2 楼 case5166 的回复:] [quote=引用 1 楼 wmxcn2000 的回复:] 按需要更新,哪个字段有变化就更新哪个 。 性能上可能会有有优势。 PS:oracle 写数据时,按块写入,不是按具体的记录。
情况性能差别是否大呢? 按需更新会增加SQL硬解析数量。 但是全字段更新,所有更新就一条SQL,硬解析少。[/quote] 增加硬解析数量,这个理论依据是从何而来的?[/quote] update set areaname = :areaname where xxxx=xxx 修改了province ,和city update set province = :province,city=:city where xxxx=xxx 这样不就出现两条SQL了吗? ----------------------------------------- 然后我想知道方式二在大表高并发操作下是否会成为系统性能瓶颈呢?二者性能差别是不大?
jdsnhan 2017-12-14
  • 打赏
  • 举报
回复
引用 2 楼 case5166 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:] 按需要更新,哪个字段有变化就更新哪个 。 性能上可能会有有优势。 PS:oracle 写数据时,按块写入,不是按具体的记录。
情况性能差别是否大呢? 按需更新会增加SQL硬解析数量。 但是全字段更新,所有更新就一条SQL,硬解析少。[/quote] 增加硬解析数量,这个理论依据是从何而来的?
卖水果的net 2017-12-13
  • 打赏
  • 举报
回复
你用的是 绑定变量的形式,不会有很多的硬解析的; 语句越知,解析的成本越小; 无论如何,也是 方式一 ,更为优化;
我看见佛 2017-12-13
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
按需要更新,哪个字段有变化就更新哪个 。 性能上可能会有有优势。 PS:oracle 写数据时,按块写入,不是按具体的记录。
情况性能差别是否大呢? 按需更新会增加SQL硬解析数量。 但是全字段更新,所有更新就一条SQL,硬解析少。
卖水果的net 2017-12-13
  • 打赏
  • 举报
回复
按需要更新,哪个字段有变化就更新哪个 。 性能上可能会有有优势。 PS:oracle 写数据时,按块写入,不是按具体的记录。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧