2016-08-04 11 views
0

は、私は次のスキーマを持つテーブルを持っている:http://i.imgur.com/jn2nrFT.pngMySQLの表を挿入し、パフォーマンス

そのMySQLの、InnoDBの上で実行されている、基本的なデジタルオーシャンホスト(512メガバイト、1個のCPU)に。私はPHP /ドクトリンを使用していて、テーブルには5000行を持っていたときに私のコードでは、私は

for($i = 0; $i < 5000; ++$i) { 
    $row = findRowInTable(); 
    if (! $row) { 
     insertNewRow(); 
    } 
} 
$em->flush(); 

のようにそれは遅いです何かを、それはテーブルが空のときに20代のようなものを取り、そして50年代。

どうすれば最適化できますか?私は最大5Kの行を追加しますが、テーブルが200Kの行に長くなっても、このプロセスを120秒以下にする必要があります

+2

パフォーマンスを望む場合は、doctrineを使用しないでください。 –

+0

あなたはもっと大きなボートが必要になります。 –

+1

そしてより多くのラムを得る。もう1つのCPUも素敵です。さらに、同じループでdb接続を開いたり閉じたりしていないかどうか、および/またはそこにdb関連のものを問い合わせているかどうかはわかりません。 –

答えて

0

データベース内にない行をループ外で見つけようとすると、 1つのクエリで行を見つけて、PHPに反復させます。

$rowsARR = findRowsNotInTable(); 
for($i = 0; $i < sizeof($rowsARR); ++$i) { 
     insertTheRow($rowsARR[i]); 
} 
$em->flush();