我有大约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
运算符,但它给了我一个错误。
答案 0 :(得分:1)
请注意,由于开头“%”,约束“LastName like'%robe%'”将强制MySQL执行全表扫描,尽管所有500万行。这非常缓慢,并且大部分时间对于像网站这样的生产系统是不可接受的。问题是你无法创建有效的索引来帮助这个查询。 MySQL全文索引有点好,但效果不好。
在这种情况下,像Sphinx或Solr这样的外部搜索引擎可以提供性能和功能。