最快的MySQL性能更新单个字段在单个索引行



我试图从更新索引行重复替换varchar字段中的数据的应用程序中获得最快的性能。该varchar字段将在后续更新时使用相同大小的数据进行更新(因此单行永远不会增长)。令我非常困惑的是,我发现性能与字段本身的大小直接相关,而与直接替换文件系统文件中的数据相比,性能差得远。1k字段大小比50k字段大小快几个数量级。(在行大小限制内)如果行存在于数据库中并且大小没有改变,为什么更新会产生如此多的开销?

我正在使用innodb,并已禁用二进制日志记录。我已经通过使用SQL生成的字符串排除了通信开销。尝试使用myisam,它大约快了2-3倍,但仍然太慢。我知道数据库有开销,但我只是简单地用相同大小的数据替换单个字段中的数据。除了直接替换比特之外,db还在做什么?

粗糙性能# s81个更新/秒(60k字符串)1111 updates/sec (1k string)

文件系统性能:1428个更新/秒(60k字符串)

我正在做的更新是插入…重复键更新。直接更新大约快了50%,但仍然慢得离谱。

有什么专家能给我一些启发吗?有办法提高这些数字吗?

我在DBA StackExchange中解决了一个关于使用CHAR和VARCHAR的问题。请看所有的答案,不要只看我的。

也要记住一些其他的事情。InnoDB的特点是gen_clust_index,所有InnoDB表的内部行id聚集索引,每个InnoDB表一个。如果更改主键中的任何内容,这将使gen_clust_index真正得到重新组织。

最新更新