2

我有大约 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

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

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

我尝试使用 match against 而不是like运算符,但它给了我一个错误。

4

1 回答 1

1

请注意,约束“LastName like '%robe%'”因为开头“%”将强制 MySQL 对所有 500 万行执行全表扫描。这非常慢,而且大多数时候对于网站等生产系统来说是不可接受的。问题是您无法创建有效的索引来帮助此查询。MySQL 全文索引稍微好一点,但性能不佳。

在这种情况下,像 Sphinx 或 Solr 这样的外部搜索引擎在性能和功能方面都是出路。

于 2012-12-25T13:40:45.467 回答