在TIDB中指定更新一个字段的值和更新整个一行的值性能有差异吗

【 TiDB 使用环境】测试
【 TiDB 版本】6.5.1
【复现路径】业务指定更新对应字段,业务偷懒更新整个一行
【遇到的问题:问题现象及影响】

根据tikv的数据读写原理,无论是修改还是增加,最后都是写入新版本去覆盖老的版本的kv,是否认为更新一个字段和更新整个一行在开销上没有太大差别,请TiDB大佬解下疑惑。

如果没有索引的话,区别不大,有索引的话,那是有影响的。更新一列,只需要调整这一列的索引,更新多列,就得调整多几列的索引。
我是这么认为的。

有差异的

我感觉差不多 :joy_cat:

我感觉你理解的没错,更新一行的一个字段和多个字段应该开销一样的

感觉应该是一样的,key-value,一个字段和多个字段应该都是在value里

1 个赞

如果有索引,会把其他列的索引一并组支成key value提交。会增加好几行。如果有唯一索引,还要检查冲突。没索引的话代价一样,有索引的话还是有很大区别的吧。

没有差异,tidb你更新一个字段也是需要把原来所有字段拉出来重新set一条新value的。。。

没区别,tidb增删改都是插入一条新的key-value

各有各自的道理。分情况,我认为有差异。如果一行有2个字段,和1000(或者更多,极限)个字段 。想想就费心。

:thinking:对,你说的是更新索引列和不更新索引列的区别

1 个赞

理论上是没有多大差异,但是实际的网络传输和内存消耗这一块可以测试下是否会有比较大的影响

更新一行,如果有索引的话,那自然就更新了索引列了 :grinning:

有差异吧

有资源的同学可以测试一下差异

理论上是,如果没有索引性能应该是一样的

key-value值,应该没有太大区别,毕竟update一样也需要重新更新vaule值,写入tikv

应该是差不多的,都是新增

不过可能有一些额外的网络开销,索引的区别等,可能有些微的影响

提交的时候的网络开销吗, 如果不是字段特多特大,这个应该可以忽略