我有一个非常大的结果集,其中包含近 2 GB 的产品数据,分布在多个表中,每个表总共有大约 500,000 条记录。我需要处理每条记录以导出到一组文件。
以下将在服务器尝试保存结果集时崩溃,因此我不得不切换到仅创建一个查询以仅获取与查询结果匹配的每条记录的主 id,然后对每个主 id 执行第二次查询以得到那个单独的产品。由于所有这些辅助查询,这是非常低效和数据库密集型的。
这是导致它崩溃的查询和代码。我怎么能不呢?
$query =
"SELECT SQL_NO_CACHE SQL_BIG_RESULT
products.*,
inventory.*,
pricing.*,
markets.*
FROM
products,
categories,
markets,
pricing,
inventory
WHERE
products.catid = categories.id AND
markets.id = products.marketid AND
pricing.productid = products.id AND
inventory.productid = products.id AND
inventory.all_stock > 0 AND
products.sale = 'Y' AND
categories.active = 'Y' AND
inventory.last_update > UNIX_TIMESTAMP(NOW() - INTERVAL 1 DAY)
GROUP BY
products.id";
$Db = new DbConnector();
$r = $Db->query($query); // !Never gets past this point!
while ($product = $r->fetch(PDO::FETCH_ASSOC)) {
// Stuff gets done here.
}