【问题标题】:MYSQL Match AGAINSTMYSQL 匹配
【发布时间】:2011-09-12 08:18:32
【问题描述】:

到目前为止,我有一个名为“business”的表,其中包含 13,000,000 条记录。 我想在此表中搜索 lowerTitle 和电话字段。 如果我正在使用:

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

它工作得很快,现在我也想在phone 字段中搜索:

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

由于某种原因,它运行得很慢,有人可以在这里提供帮助吗?

非常感谢。

【问题讨论】:

  • 谁我们输出SHOW INDEX FROM business

标签: mysql indexing match


【解决方案1】:

确保您在 (lowerTitle,phone) 上有一个全文(不是 btree)索引。如果没有:

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

【讨论】:

  • lowerTitlephone 是全文。我应该为两者做一个索引吗?如果以后我将不得不在其他领域(如州、国家、城市等)进行搜索?
  • 是的,您需要一个多列索引。 MySQL 不知道如何进行位图索引扫描。但是,当您匹配单个字段(很像 postgres 中的 gist 索引)时,它可能知道如何使用全文索引查询中的任何列,因此您可能能够摆脱全文索引各个列。 (试试看。)
  • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“ON business (lowerTitle, phone)”附近使用正确的语法
猜你喜欢
  • 2019-01-25
  • 2017-07-19
  • 2016-06-11
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多