2013-04-25 52 views
0

我有兩個表A和B. 我需要表A(var1和var2)中的兩列和表B(var3)中只有一列。 它是更有效地做MySQL組合(Inner Join和Select)效率

SELECT var1, var2, var3 FROM TABLE_A a 
INNER JOIN TABLE_B b ON (a.var1 = b.var1) 

OR

SELECT var1, var2 FROM TABLE_A a 
INNER JOIN (SELECT var1, var3 FROM TABLE_B b) b_min ON (a.var1 = b_min.var1) 

接合之前第二個減少表B列#,但似乎更「複雜」

+0

「TABLE_A.var1」和「TABLE_B.var1」上是否有索引? – 2013-04-25 14:38:47

+0

我想說第一個好多了。根據我的經驗,'JOIN's比子查詢更好。 – 2013-04-25 14:39:36

+0

@火箭,是的,我已在編輯 – 2013-04-25 14:40:26

回答

2

我會去的第一個。在第二種情況下,當您執行子查詢時,TABLE_B上的任何索引都將丟失。

列數對查詢的效率沒有影響。這是的數量。 MySQL需要掃描的行數減慢了查詢速度,而不是列數。

P.S.確保TABLE_A.var1TABLE_B.var1上有索引。

+0

上添加索引感謝您在第二段的解釋! – 2013-04-25 14:51:37

+0

不客氣! :-D – 2013-04-25 14:52:55

0

我寧願用第一一。實際上,沒有必要使用子查詢,因爲它內部有任何聚合函數或操作。