2011-09-24 55 views
0

以下兩種選擇之間的優化觀點有什麼主要區別嗎?在第一個選項中,我將表格別名,所以total_paid計算僅運行一次。在第二個選項中,沒有表別名,但SUM計算需要幾次。MySQL查詢優化 - 別名還是不?

選項1

SELECT tt.*, tt.amount - tt.total_paid as outstanding 
FROM 
    (
    SELECT t1.id, t1.amount, SUM(t2.paid) as total_paid 
    FROM table1 t1 
    LEFT JOIN table2 t2 on t1.id = t2.t1_id 
    GROUP BY t1.id 
) as temp_table tt 
WHERE (tt.amount - tt.total_paid) > 0 
LIMIT 0, 25 

選項2

SELECT t1.id, t1.amount, SUM(t2.paid) as total_paid 
    , (t1.amount - SUM(t2.paid)) as outstanding 
FROM table1 t1 
LEFT JOIN table2 t2 on t1.id = t2.t1_id 
WHERE (t1.amount - SUM(t2.paid)) > 0 
GROUP BY t1.id 
LIMIT 0, 25 

或者,也許有一個更好的選擇?

回答

1

如果您使用EXPLAIN運行查詢,您將能夠看到「內部」發生了什麼。

另外,爲什麼不直接運行它並比較執行時間?

瞭解更多關於解釋here