2012-09-25 46 views
0

如果我有n個查詢q1,q2,q3 ... qn,並且它們每個都運行t1,t2,t3 ... tn作爲運行時間。Mysql聯盟時間V.S.單獨查詢

我也有另一個查詢Q1 UNION ALL Q2 UNION ALL Q3 .... UNION ALL QN和運行時間爲TU

比較Tu和T1 + T2 + T3 + ... + TN,其中之一將是理論上更快?我知道做實驗是找出問題的最佳方法,但我需要聽取專家對該理論的看法。謝謝

+1

這聽起來像一個考試問題。 –

+0

這是一個實際的需要。需要考慮執行策略 –

+0

您是否嘗試執行每個版本?或比較執行計劃? – Taryn

回答

2

UNION操作符要求在返回任何行之前刪除結果集中的重複元組(行)。這實際上是一個SORT UNIQUE操作。這對於小結果集的價格相對低廉,但對於大規模的套,它可能是資源在服務器上耗費時間(即需要很長的時間。)

從理論上講,查詢與UNION ALL運營商相結合,而不是UNION操作員最快,因爲它會消除( n -1)往返數據庫,vs分別運行查詢。但對於大數值的 n,您將碰到SQL文本大小(最大數據包大小)的實際限制。

給定運算符和單獨查詢之間的選擇,對於較大的結果集,單獨查詢在服務器端的資源密集度要低。

簡而言之,它確實是每次查詢的繁重工作與SORT UNIQUE操作的繁重工作之間的一種折衷。

2

由於帶有n個子查詢的UNION ALL可以作爲n個選擇來執行,所以智能DBMS應該能夠完成與n個單獨選擇相同的工作。

這留下了往返時間,即n * rtt爲n查詢和rttUNION ALL

理論上,智能DBMS應該總是比n個單獨的查詢更快地回答單個UNION ALL
在實踐中,像往常一樣,所有投注都沒有測試。