mysqlクエリの結果セットを通過し、mysqlから返されたIDを非常に大きな多次元配列のIDと比較する、一見無害なwhileループがあります。
//mysqli query here
while($row = fetch_assoc())
{
if(!in_array($row['id'], $multiDArray['dimensionOne']))
{
//do something
}
}
スクリプトが最初に実行されるとき、毎秒約 2 ~ 5k の速度で結果が実行されます。時にはそれ以上、めったに少なくなりません。結果セットは 700 万行を返し、スクリプトは 2.8GB のメモリでピークに達します。
ビッグデータに関しては、これは多くありません。
問題は、600k マークあたりでループが遅くなり始め、800k までに 1 秒間に数レコードを処理していることです。
サーバーの負荷とメモリの使用に関しては、問題はありません。
これは、大規模なデータ セットを処理する他のスクリプトで以前に気付いた動作です。
内部ポインターが深く移動するにつれて、配列のシーク時間は徐々に遅くなりますか?