2012-07-31 71 views
26

我有一個MySQL查詢(運行MySQL 5.0.88),我試圖加快。基礎表具有多個索引,對於有問題的查詢,使用了錯誤的索引(i_active - 16.000行,與i_iln - 7行)。如何提示要在MySQL select查詢中使用的索引?

我對MySQL不是很有經驗,但是讀了一個use index提示,它可以強制mySQL使用某個索引。我試圖這樣:

SELECT art.firma USE INDEX (i_iln) 
... 

但這會產生MySQL錯誤。

問題
有誰能告訴我我做錯了什麼嗎? (除運行5.0.88,這是我無法改變)

+2

對於它的價值,USE INDEX不會強制使用指定的索引。它只是意味着「不要考慮使用任何*其他*索引。」您指定的索引可能與查詢無關,在這種情況下,MySQL將不會使用它。 – 2014-01-20 22:46:23

回答

34

你錯過了FROM table

正確的SQL應該是:

SELECT art.firma FROM your_table USE INDEX (i_iln) WHERE ....

+7

啊... 2100ms到0ms。涼! – frequent 2012-07-31 01:19:37

0

選擇Coloumn1,Coloumn2,Coloumn .... FROMTABLE_NAMEUSE INDEXINDEX_NAMEWHERE Coloumn = 「條件」;

如果你有正確的索引,你不需要使用index()。您的查詢自動選擇正確的索引。如果您的查詢在使用索引後變慢,請重新檢查索引,索引中出現錯誤。 在此先感謝。在此處的代碼

+0

你的答案會受益於一些編輯可讀性,一些格式和一些刪除看起來像未使用的模板佔位符的文本片段。 – Yunnosch 2017-05-29 11:14:40

+0

歡迎來到SO。請閱讀[如何解答](http://stackoverflow.com/help/how-to-answer),並按照該指南提供高質量的答案。 – thewaywewere 2017-05-29 11:31:33