2011-10-17 12 views
1

インデックス付き行を更新してvarcharフィールドのデータを繰り返し置き換えるアプリケーションから、最速のパフォーマンスを得ようとしています。このvarcharフィールドは、その後の更新時に同じサイズのデータ​​で更新されます(したがって、単一の行は決して成長しません)。私の全くの混乱に対して、パフォーマンスはフィールド自体のサイズに直接関係しており、ファイルシステムファイル内のデータを直接置き換えるパフォーマンスはどこにもありません。すなわち1kフィールドサイズは50kフィールドサイズよりも1桁速い。 (行サイズ制限内)行がデータベースに存在し、サイズが変更されていない場合、なぜ更新で大きなオーバーヘッドが発生するのでしょうか?単一のインデックス付き行で単一フィールドを更新する最速のMySQLパフォーマンス

私はinnodbを使用しており、バイナリログを無効にしています。私は生成されたSQL文字列を使用して通信のオーバーヘッドを排除しました。 myisamを使ってみましたが、それは約2〜3倍速いですが、まだ遅すぎました。私はデータベースがオーバーヘッドを持っていることを理解していますが、私は単純に同じフィールドのデータで同じフィールドにデータを置き換えています。直接ビットを置き換える以外にdbは何をしていますか?

粗パフォーマンス比較位の 81アップデート/秒(60K列) 1111アップデート/秒(1K列)

ファイルシステムの性能: 1428のアップデート/秒(60K列)

更新私私のやっているのは、重複したキーの更新時に挿入されたものです。まっすぐな更新は約50%高速ですが、やっていることについてはまだまだ遅いです。

そこにいる専門家は誰でも私を啓発できますか?これらの数字を改善する方法はありますか?

+1

varcharの50kのインデックス?おそらくインデックスハッシュは余分な時間を費やしていることに気付くでしょう。 –

+0

私は更新しているフィールドを明確にするためにインデックス/キーの一部ではありません。私は行のために使用しているキーはちょうどintです – user999621

+0

Ronaldoフィールドの長さが255より大きい必要があるためcharデータ型を使用することができません。ただし、テーブルを宣言するときにROW_FORMAT = FIXEDを使用しました。 – user999621

答えて