我正在读取一个包含 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)
对此进行解释并仅返回 100 行被搜索和常量ref意味着它应该很快它使用索引。
现在在我的循环中,我有以下内容:
while ($line = fgetcsv($handle)){
$foobar->execute();
$data = $foobar->fetchAll(\PDO::FETCH_ASSOC);
var_dump($data); echo '<br /><br />';
}
为什么需要很长时间?CSV 文件中只有 1000 行,对查询运行解释似乎足够快。
它会在 5-10 分钟后超时,但不应该花那么长时间,我不知道是什么问题。
有一点需要注意foo3表包含700万条记录。