2016-07-06 251 views
1

如您所知,一個查詢僅使用一個每個表的索引。因此,有一些索引提示讓我們告訴查詢使用哪個索引。 Here是這方面的文檔。索引提示中USE和FORCE有什麼區別?

還有爲三個索引提示:

  • USE
  • IGNORE
  • FORCE

好吧,我不明白什麼是USEFORCE之間的差異。他們看起來和我一樣。任何人都知道他們有什麼不同?

回答

2

USE INDEX(index_list)提示告訴MySQL只使用其中一個指定的索引來查找表中的行。

FORCE INDEX提示像USE INDEX(index_list)一樣行爲,另外假設表掃描非常昂貴。換句話說,只有在無法使用某個指定索引在表中查找行時才使用表掃描。

From the docs

所以使用INDEX使得DB只用具體指標進行搜索,並在必要時表掃描*。

FORCE INDEX執行相同的操作,但只有在確實需要時才使用表掃描。

* A 表掃描正在讀表數據,而無需索引

+0

好的,謝謝你..給予好評..只是「表掃描」是「指數」? – stack

+0

A *表掃描*正在讀取沒有索引的表數據。 –

+0

啊我明白了。你說的不同是這樣的:*「但確保只有在真正需要時才使用表掃描。」*。你也說'USE'索引相同:*「如果有必要,一個表掃描」*。那麼有什麼不同呢? – stack