2013-01-16 21 views
0

我遇到了一個優化的問題,下面的變化似乎成爲一種解決方法:這兩個MySQL查詢形式總是等價的嗎? GROUP BY + ORDER BY +進行限制

前(100 + S):

SELECT t1.*,t2.a AS t2_a,t2.b AS t2_b FROM ... JOIN ... WHERE ... GROUP BY ... ORDER BY ... LIMIT 5 

後(0.01 S):

SELECT * FROM 
    (SELECT t1.*,t2.a AS t2_a,t2.b AS t2_b FROM ... JOIN ... WHERE ... GROUP BY ... ORDER BY ...) AS x 
LIMIT 5 

撇開這種類型的優化是否是最適合我的情況的問題(我的研究告訴我,這是最PRAC這對我來說是實現的),這兩種形式是否保證在所有情況下都能得到相同的結果?

我們可以假設內部查詢可能有許多JOIN,但不包括其他子查詢或UNION(即簡單的SELECT)。在我的情況下,內部查詢可能因用戶輸入而有很大差異,所以這就是爲什麼我把它作爲關於查詢表單的一般問題的結構。

回答

0

唯一的區別是後者將有一個使用派生查詢的額外「步驟」。否則,結果將是相同的。