我有一个包含大约 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
运算符,但它给了我一个错误。
最佳答案
请注意,由于以“%”开头,约束“LastName like '%robe%'”将强制 MySQL 对所有 500 万行执行全表扫描。这是非常慢的,并且大多数时候对于像网站这样的生产系统来说是 Not Acceptable 。问题是您无法创建有效的索引来帮助此查询。 MySQL 全文索引好一点,但性能不佳。
在这种情况下,Sphinx 或 Solr 等外部搜索引擎在性能和功能方面都已经过时了。
关于mysql - 使用全文搜索搜索 500 万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028239/