我很确定使用关系数据库,一次读取50条记录比每条记录50条记录更快更好。一次执行多次写入是否有性能优势?如果没有,为什么不呢?
答案 0 :(得分:0)
可能取决于RDBMS和存储引擎,但至少在MySQL / InnoDB中,一个事务中的多次写入(以及多插入语法,即afaik,是MySQL扩展)允许您不更新非提交事务之前的唯一索引,并且索引的更新立即与所有新值一起发生(因为它是一个b树,以这种方式它更快)。 RDBMS也可能优化其他写入,以便顺序而不是随机写入。
此外,如果存在表级锁定(如在MyISAM中),则锁定表一次,写入多个记录然后解锁会消除每次写入时锁定/解锁的开销。
通常情况下,性能会有所提升,但这取决于所使用的数据库服务器。
答案 1 :(得分:0)
一次完成所有的阅读都是有道理的,虽然它有一些问题我会在一分钟内触及。
立即执行所有写操作会产生一个特殊问题:数据存储在数据库中,直到您将其放在那里。如果您正在等待一些优化阈值(假设为50),那么事务1将必须等待(不相关的)事务2-50在它进入数据库之前完成。这意味着在平均时间(可能是几个[秒,分钟,小时]),没有人知道这些记录是什么,或者他们是否更新了新值。 (与读取相同,但反过来。当您使用它时,您的数据可能已过期。)
性能方面,我无法想象将写入组合在一起会产生一些性能。 (如果这是令人困惑的阅读,我的意思是“你应该总是通过分组获得性能提升。”)如果没有别的,你有更好的机会来击中内存缓存而不是磁盘缓存,而不是单独执行它们。 @Darhazer提出了一个关于锁定的好点。因此,从总时间花在写作的角度来看,最好将它们分组。从应用程序性能的角度来看,如果没有对应用程序的业务需求的复杂知识,很难说。