我想问一下这种方法是否有效。我有一个名为收入的巨大表格,我经常要查询。
我正在尝试优化,以便我只根据相关的campaign_id进行查询。我需要更快地完成查询!
我认为可能的解决方案是在我的PHP文件顶部附近创建一个临时表,然后在最后删除临时表。
在此之间,我应该能够在临时表上运行更密集的查询,因为它具有更有限的数据集。
我对使用这种方法有点害怕。
这些表会被正确删除吗?我有点担心临时表闲逛,崩溃甚至致命地拖延我的实例。
//Create temporary table for the campaign_id
$query = "CREATE TEMPORARY TABLE IF NOT EXISTS earnings_temp AS (SELECT * FROM earnings WHERE earning_paid_campaign_id = ? OR earning_free_campaign_id = ?)";
if ($statement = $mysqli->prepare($query))
{
$statement->bind_param("ii", $campaign_id, $campaign_id);
$statement->execute();
$statement->close();
}
....VARIOUS QUERIES ON earnings_temp.....
//Drop temporary table for campaign_id
$query = "DROP TEMPORARY TABLE IF EXISTS earnings_temp";
if ($statement = $mysqli->prepare($query))
{
$statement->execute();
$statement->close();
}
答案 0 :(得分:1)
你是对的。制作临时表有助于在某些情况下优化您的工作流程。主要是在处理大型数据集时(如您建议的那样)。
您的PHP似乎是正确的。你创建它,然后你处理它。
不要担心桌子会挂在桌面上,甚至会使我的实例崩溃甚至致命,因为它们会在连接被切断时自动丢弃。 但要注意,如果表格太大,它们最终会从内存类型转移到磁盘上,从而降低其速度。此外,如果并发连接太多而您没有内存,则可能会使数据库停止运行。但是服务器的正确配置可以避免这种情况。