1000行を含むcsvファイルを読んでいます。行ごとにクエリを実行します。クエリは次のとおりです。
$foobar =
SELECT foo1.ID
FROM foo1
INNER JOIN foo2 ON foo2.ID = foo1.ID
LEFT JOIN foo3 bar1 ON bar1.ID = foo1.ID
LEFT JOIN foo3 bar2 ON bar2.ID = foo1.ID
WHERE foo1.Text LIKE :txt
AND foo2.col1 = 31 AND bar1.col1 = 138 AND bar2.col1 = 271
AND (bar1.col2 = "" OR bar1.col2 IS NULL)
AND (bar2.col2 = "" OR bar2.col2 IS NULL)
これについて Explainを実行し、検索対象の 100 行のみを返し、定数refを返しました。これは、インデックスを使用する高速であることを意味します。
今私のループには次のものがあります:
while ($line = fgetcsv($handle)){
$foobar->execute();
$data = $foobar->fetchAll(\PDO::FETCH_ASSOC);
var_dump($data); echo '<br /><br />';
}
なぜ時間がかかるのですか?CSV ファイルには 1000 行しかなく、クエリで Explain を実行するだけで十分な速さのようです。
5〜10分後にタイムアウトしますが、それほど長くはかからないはずです。何が問題なのかわかりません。
foo3テーブルには700万件のレコードが含まれていることに注意してください。