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

时间:2011-10-17 17:41:24

标签: mysql performance

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

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

#p>粗略的表现# 81次更新/秒(60k字符串) 1111更新/秒(1k字符串)

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

我正在做的更新是插入...重复密钥更新。直接更新速度大约快了50%,但它的工作速度仍然非常慢。

那里有专家可以开导我吗?有什么方法可以改善这些数字吗?

1 个答案:

答案 0 :(得分:0)

I addressed a question in the DBA StackExchange concerning using CHAR vs VARCHAR。请阅读所有答案,而不仅仅是我的答案。

还要考虑其他因素。 InnoDB features the gen_clust_index, the internal row id clustered index for all InnoDB Tables, one per InnoDB table。如果您更改主键中的任何内容,这将为gen_clust_index提供真正的锻炼重新定位。