创建和使用临时表

时间:2012-06-26 09:37:49

标签: mysql temp-tables

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

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

我正在创建它:

$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语法放在较大查询的开头并使用;?

终止它,它会工作吗?

3 个答案:

答案 0 :(得分:1)

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

如果数据不是太大,您可以使用

创建副本
CREATE TEMPORARY t2 SELECT * FROM t;
CREATE TEMPORARY t3 SELECT * FROM t;
CREATE TEMPORARY t4 SELECT * FROM t;

并在大查询中使用它们。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用::

Insert into temp_table select from table

它将自动创建一个表格,其描述与表格相同,完成后将其删除。