我刚刚了解了临时表,并且在我的一些大查询中使用它们给了我一些非常好的速度提升。
我遇到的问题是,当我创建表时,它不会持续使用以下查询的全长,也不会持续到脚本结束。
我正在创建它:
$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 :(得分: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
它将自动创建一个表格,其描述与表格相同,完成后将其删除。