复制到临时表需要很长时间

时间:2014-01-29 07:44:16

标签: php mysql temp-tables

实际上我使用这个临时表概念becoz我希望查询运行得很快。 我的代码如下

$maketemp1 = "
    CREATE TEMPORARY TABLE bin1 (
     `ackNo` varchar(55),
      `repairStatus` varchar(100),
      `productFamily` varchar(100),
      `location` varchar(100),

      `binTo` varchar(100),
      `binTime` datetime,
      `age` int(50)

       )
  "; 

 mysql_query($maketemp1) or die ("Sql error : ".mysql_error());

  $inserttemp1 = "
    INSERT INTO bin1
      (`ackNo`, `repairStatus`, `productFamily`, `location`,`binTo`,`binTime`,`age`)
    SELECT customerupdate.ackNo,tblRepairQueue.repairStatus, tblRepairQueue.productFamily,tblRepairQueue.location,customerupdate.binTo,customerupdate.binTime,
    TIMESTAMPDIFF(HOUR , customerupdate.binTime , '".$value."') FROM `tblRepairQueue` , `customerupdate` WHERE
tblRepairQueue.ackNo=customerupdate.ackNo  and tblRepairQueue.location='".$empLocationName."'

  ";

  mysql_query($inserttemp1) or die ("Sql error : ".mysql_error());

但是发生的事情是,当我运行上述查询时,复制时间太长..与普通查询相比,该过程非常慢。 而且我还有另一个疑问......使用临时表的概念会更快地给出结果吗?

1 个答案:

答案 0 :(得分:0)

临时表可能不是最佳选择,具体取决于您要实现的目标...创建一个包含一些数据整合的表以缩小下一对请求的范围会变得很有用但是很少有效率如此。

此外,临时表不能多次访问,因此需要一个真正的表。

创建表需要磁盘写入,这比RAM中的纯选择要低得多。使用缓存方法,您可以非常快速地检索先前选择的结果。您可以将该选择用作查询的FROM部分,以使其比在庞大的数据库中池化更快。但即便如此......

我们正在发展大约1的数据集,大查询是根据用户的权利(类别,商店......)发现产品我们试图为每个用户创建一个表,指向他拥有的产品权限,然后使用该表来检索数据,而不需要大的条件,但使用SSD仍然很慢。所以我们只是在服务器上卸载了大量的RAM,我们用来填充临时表的SELECT在登录时为每个用户运行,然后用作FROM,一切都很完美。