行をテーブルに挿入するループが PHP コードに含まれています。例えば:
while ($info = mysql_fetch_assoc($someQuery)) {
mysql_query("INSERT INTO X (i,j) VALUES ($info['ii'],$info['jj'])");
}
ループは数回しか繰り返されないため、数か月前はこれで問題ありませんでした。ただし、Web サイトのトラフィックが増加したため、このループが 1000 回以上繰り返されることがあります。テーブルにはいくらかのオーバーヘッド( 4,305 KiB ) があり、このテーブルからの SELECT がMySQL のスローログに表示されています。これはおそらく、INSERT の長いリストがロックを解放するのを待たなければならないためですか?
スケーリングを改善するには、コードをどのように最適化すればよいですか?
私が試してみようと思ったいくつかのこと:
- INSERT DELAYED - 調べる必要があります。役に立ちますか?
- 同じクエリに複数の行を挿入してみてください。しかし、どのような制限を設定する必要がありますか? 50、500、1000?