2011-10-17 31 views
1

我試圖從更新索引行重複替換varchar字段中的數據的應用程序中獲得最快的性能。這個varchar字段將在後續更新時使用相同大小的數據進行更新(因此一行不會增長)。對於我完全的困惑,我發現性能與字段本身的大小直接相關,遠不及直接替換文件系統文件中的數據。即1k場大小的數量級比50k場大。 (在行大小限制內)如果行存在於數據庫中並且大小沒有變化,爲什麼更新會產生這麼大的開銷?最快的MySQL性能更新單個索引行中的單個字段

我使用innodb並禁用二進制日誌記錄。我通過使用sql生成的字符串排除了通信開銷。嘗試使用myisam,它大約快2-3倍,但仍然太慢。我瞭解數據庫已經開銷,但我再次用單個字段中的數據替換大小相同的數據。除了直接替換位之外,db還在做什麼?

粗糙peformance#的 81更新/秒(60K字符串) 1111更新/秒(1K字符串)

文件系統的性能: 1428次更新/秒(60K字符串)

更新我在做重複密鑰更新時插入...直接更新速度大約快50%,但仍然可以放慢速度。

任何專家都可以給我啓發嗎?任何方式來改善這些數字?

+1

50k varchar的索引?你可能會發現索引散列是什麼佔用了額外的時間。 –

+0

只是爲了澄清我正在更新的字段不是索引/鍵的一部分。我使用的行的關鍵只是一個int – user999621

+0

羅納爾多我無法使用char數據類型,因爲字段的長度需要大於255.但是,我確實在聲明表時使用了ROW_FORMAT = FIXED。 – user999621

回答