2012-06-26 67 views
1

我刚刚了解了临时表,并且在我的一些大型查询中使用它们给了我一些非常好的速度提升。创建和使用临时表

我遇到的问题是,当我创建表时,它不会持续使用它的以下查询的全部长度,也不会持续到脚本结束。

我使用创建它:

$dbh->exec("CREATE TEMPORARY TABLE _temp_unique_invoice_ref ENGINE = MEMORY AS 
     (SELECT jobRef, invoiceRef FROM invoices_out_reference GROUP BY invoiceRef)") ; 

查询后,是几百行代码,并试图利用临时表的多次在子查询,但它仅适用于第一个子查询和查询的其余部分失败,说该表不存在。

由于这个查询每隔10秒就会被许多用户运行,所以它可能会在10秒钟之前执行很多次,这个情况也会变得更加复杂。

如何在不使用TEMPORARY关键字并放置等的情况下进行此项工作?


下面的查询只是一个大的查询。准备在同一个对象上调用,这可能会导致一个新的连接?如果我将create table语法放在较大的查询的开始并使用它终止,它会起作用吗?

+0

为什么不去创建表格(不是临时的),并且一旦你的工作完成,删除该表格? – sushil

回答

0

可以使用::

Insert into temp_table select from table 

它会自动创建一个表一样的表中的描述,当你做砸。

0

没有足够的有关您的设置的信息。 所以我尝试一个疯狂的猜测:是否可以为每个查询创建一个新的连接,并且临时表绑定到一个连接,因此在其他人中不存在?

1

临时表不能在一个查询中使用多次。

如果数据不是太大,你可以,但是,创建副本与

CREATE TEMPORARY t2 SELECT * FROM t; 
CREATE TEMPORARY t3 SELECT * FROM t; 
CREATE TEMPORARY t4 SELECT * FROM t; 

,并在大的查询中使用它们。