2013-08-19 70 views
0

如果我有兩個表,A和B,其中A爲索引的愛和A.II,而B是在碧索引,並且我運行以下查詢:使用索引

SELECT * 
FROM A JOIN B 
    on A.i = B.i 

我知道這將使用B上的索引,但是如果我使用以下查詢,是否會獲得任何性能提升(即,使用A上的索引)?

SELECT * 
FROM A JOIN B 
    on A.i = B.i AND A.ii = B.ii 

我的直覺告訴我沒有了,this MySQL文檔表明,我需要使用ai和A.II WHERE子句看到任何好處,但我想不是一個受過教育的猜測更多。

回答

0

即使通過加入A.ii也會有任何收益,但它會因包含未索引的B.ii而丟失。所以不,沒有收穫。

0

MySQL支持index merge optimization,所以它可以使用B上的兩個索引並找到它們之間的交集。您將在EXPLAIN輸出中注意到這一點,當type: index_mergekeys: i,ii,並且在Extra字段中還會有一個註釋,表明它正在使用交集。

但是,如果您將等號比較合併爲AND條款,則最好在一對列上定義複合索引。
http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/

的MySQL 5.6還提供了index condition pushdown,在某些情況下,這有助於即使你B.i只有一個指標,物B.ii沒有索引的。