2011-06-10 80 views
4

我有一張名爲'business'的表,迄今爲止有13,000,000條記錄。 我想在此表中的lowerTitle和phone字段中搜索。 如果我使用:MYSQL Match AGAINST

SELECT * FROM business WHERE MATCH (lowerTitle) AGAINST (`blabla` IN BOOLEAN MODE); 

它的工作速度快,現在我也想搜索在phone領域使用:

SELECT * FROM business WHERE MATCH (lowerTitle,phone) AGAINST (`blabla` IN BOOLEAN MODE); 

出於某種原因,它的工作速度很慢,別人可以幫助這裏?

非常感謝。

+0

你有什麼指標? – deceze 2011-06-10 08:58:59

+0

我們誰輸出了'SHOW INDEX FROM BUSINESS' – azat 2011-06-10 09:00:27

回答

8

確保你已經有一個全文(不是btree)索引on(lowerTitle,phone)。如果不是:

create fulltext index business_ft_idx on business(lowerTitle, phone); 
+0

'lowerTitle'和'phone'是全文。我應該爲兩者做一個索引嗎?如果後來我將不得不在其他領域,如國家,國家,城市等搜索'? – John 2011-06-10 09:04:10

+1

是的,你需要一個多列索引。 MySQL不知道如何執行位圖索引掃描。然而,當你與單個字段匹配時(很像postgres中的主要索引),如何在全文索引查詢中使用任何列的機會是衆所周知的,因此,您可能可以擺脫全文索引個別專欄。 (試試吧。) – 2011-06-10 09:07:45

+0

你的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第1行的'ON business(lowerTitle,phone)'附近使用正確的語法。 – John 2011-06-10 09:18:38