2011-06-10 76 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