如果我有一個包含主鍵和外鍵的表,並且頻繁使用包含(...WHERE primary=n AND foreign=x)
的查詢完成搜索,那麼使用這兩個鍵在MySQL中創建多重索引是否有任何性能優勢?在主鍵+外鍵上創建多重索引是否有性能優勢?
據我所知,他們都是索引,但我不確定外鍵是否仍被視爲一個索引,如果包含在另一個表中。例如,如果MySQL轉到主鍵,然後比較外鍵的所有值直到找到正確的外鍵,或者它已經知道它在哪裏,因爲外鍵也是索引?
更新:我正在使用InnoDB表。
如果我有一個包含主鍵和外鍵的表,並且頻繁使用包含(...WHERE primary=n AND foreign=x)
的查詢完成搜索,那麼使用這兩個鍵在MySQL中創建多重索引是否有任何性能優勢?在主鍵+外鍵上創建多重索引是否有性能優勢?
據我所知,他們都是索引,但我不確定外鍵是否仍被視爲一個索引,如果包含在另一個表中。例如,如果MySQL轉到主鍵,然後比較外鍵的所有值直到找到正確的外鍵,或者它已經知道它在哪裏,因爲外鍵也是索引?
更新:我正在使用InnoDB表。
對於等式比較,您無法對主鍵索引進行改進(因爲此時最多隻有一行可以匹配)。
的訪問路徑將是:
如果您對主鍵進行範圍掃描並希望通過另一列縮小範圍,則組合索引可能會有所幫助。
「例如,MySQL會轉到主鍵,然後比較外鍵的所有值直到找到正確的鍵:」那麼,* all *在那一點上只是一行。 – Thilo
根據你的解釋,這對我來說非常有意義。謝謝你切入我週一早上的腦霧! –
這取決於所使用的存儲引擎。一般來說,從我的**主觀**觀察(我沒有做過任何測試) - 不,這樣做沒有收穫。 –