2011-09-26 42 views
2

如果我有一個包含主鍵和外鍵的表,並且頻繁使用包含(...WHERE primary=n AND foreign=x)的查詢完成搜索,那麼使用這兩個鍵在MySQL中創建多重索引是否有任何性能優勢?在主鍵+外鍵上創建多重索引是否有性能優勢?

據我所知,他們都是索引,但我不確定外鍵是否仍被視爲一個索引,如果包含在另一個表中。例如,如果MySQL轉到主鍵,然後比較外鍵的所有值直到找到正確的外鍵,或者它已經知道它在哪裏,因爲外鍵也是索引?

更新:我正在使用InnoDB表。

+0

這取決於所使用的存儲引擎。一般來說,從我的**主觀**觀察(我沒有做過任何測試) - 不,這樣做沒有收穫。 –

回答

2

對於等式比較,您無法對主鍵索引進行改進(因爲此時最多隻有一行可以匹配)。

的訪問路徑將是:

  1. 外表的主鍵索引處初級= N
  2. 從表中得到的單個匹配的行
  3. 檢查任何其它條件下,使用該行中的表

如果您對主鍵進行範圍掃描並希望通過另一列縮小範圍,則組合索引可能會有所幫助。

+0

「例如,MySQL會轉到主鍵,然後比較外鍵的所有值直到找到正確的鍵:」那麼,* all *在那一點上只是一行。 – Thilo

+0

根據你的解釋,這對我來說非常有意義。謝謝你切入我週一早上的腦霧! –