使用PHP的MySQLi临时表

时间:2016-01-21 10:24:17

标签: php mysql mysqli

我想问一下这种方法是否有效。我有一个名为收入的巨大表格,我经常要查询。

我正在尝试优化,以便我只根据相关的campaign_id进行查询。我需要更快地完成查询!

我认为可能的解决方案是在我的PHP文件顶部附近创建一个临时表,然后在最后删除临时表。

在此之间,我应该能够在临时表上运行更密集的查询,因为它具有更有限的数据集。

我对使用这种方法有点害怕。

  1. 我对这种方法的总体思考是否正确?
  2. 我是否正确编写了这些查询和PHP?
  3. 这些表会被正确删除吗?我有点担心临时表闲逛,崩溃甚至致命地拖延我的实例。

    //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();
    }
    

1 个答案:

答案 0 :(得分:1)

  1. 你是对的。制作临时表有助于在某些情况下优化您的工作流程。主要是在处理大型数据集时(如您建议的那样)。

  2. 您的PHP似乎是正确的。你创建它,然后你处理它。

  3. 不要担心桌子会挂在桌面上,甚至会使我的实例崩溃甚至致命,因为它们会在连接被切断时自动丢弃。 但要注意,如果表格太大,它们最终会从内存类型转移到磁盘上,从而降低其速度。此外,如果并发连接太多而您没有内存,则可能会使数据库停止运行。但是服务器的正确配置可以避免这种情况。