2012-06-26 94 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; 

,並在大的查詢中使用它們。