我正試圖在MySQL中編寫一個存儲過程。對於複雜的原因,我有一堆彙總查詢的連接來看看對象ID,然後做另一個查詢更多的連接(包括相同的表),以獲得一些數據MySQL存儲過程,內存臨時表太慢?
所以,這樣的事情:
CREATE TEMPORARY TABLE ids ENGINE=MEMORY
SELECT MAX(child.id)
FROM parent
JOIN child ON child.parent_id = parent.id
WHERE
GROUP BY child.parent_id;
SELECT *
# MUST SELECT STUFF FROM PARENT, CHILD, AND STUFF JOINED ON CHILD
FROM child
JOIN parent ON parent.id = child.parent_id
# A BUNCH MORE JOINS HERE
WHERE child.id IN (SELECT * FROM ids);
DROP TEMPORARY TABLE IF EXISTS ids;
現在我注意到第一次選擇需要0.000秒。如果我用(1435,2352,43653,34534,...)等常數列表替換(SELECT * FROM ids),則需要0.000秒。
但是,使用臨時表創建運行它們需要0.6秒。 0.o WTH?
所以我的問題是如何跳過這個臨時表的創建,只是通過ID列表?
此外,如果我將整個第一次選擇作爲子選擇移動到第二次選擇,那麼整個過程將花費更長的時間。一分鐘以上,我放棄等待。
你看過/試過'UNION'嗎?或者,也許我錯過了臨時表的原因... – Benjam
我不明白這會有什麼幫助。 – McTrafik
也許需要澄清一下,因爲我不確定我是否理解你正在嘗試做什麼。 – Benjam