使用全文搜索搜索500万条记录

时间:2012-12-25 06:23:16

标签: mysql full-text-search

我有大约530万条记录的数据集。我对此查询有一个非常微不足道的问题:

select 
  SystemId, 
  Id, 
  FirstName, 
  LastName,
  AptUnitNo, 
  Zip, 
  StreetName,
  streetnumber,
  (case 
     when LastName like '%robe%' 
       then -8 
     else 
       0 
    end ) as Ordervalue 
 From registeredusers 
 Where LastName like '%robe%'
 Order by Ordervalue, LastName, FirstName, StreetName, StreetNumber ASC 
 limit 0,50

此查询根据lastname中找到的最佳匹配项提供记录。我在姓氏上添加了全文索引。

我需要一些帮助,如何将上述查询转换为基于全文索引的工作。

我尝试使用匹配代替like运算符,但它给了我一个错误。

1 个答案:

答案 0 :(得分:1)

请注意,由于开头“%”,约束“LastName like'%robe%'”将强制MySQL执行全表扫描,尽管所有500万行。这非常缓慢,并且大部分时间对于像网站这样的生产系统是不可接受的。问题是你无法创建有效的索引来帮助这个查询。 MySQL全文索引有点好,但效果不好。

在这种情况下,像Sphinx或Solr这样的外部搜索引擎可以提供性能和功能。