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

标签 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

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

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

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

最佳答案

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

在这种情况下,Sphinx 或 Solr 等外部搜索引擎在性能和功能方面都已经过时了。

关于mysql - 使用全文搜索搜索 500 万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028239/

相关文章:

php - 我们在处理 session 时必须使用 mysql_real_escape_string() 吗?

sql - 全文搜索用于提取文本片段(返回预期文本及其周围)

full-text-search - 如何从 Sublime Text 2 中的“查找结果”跳转到文件?

php - 数据库搜索词突出显示和结果截断

php - 让用户从数据库中选择某人 PHP

mysql - 优化MySQL结构和查询

mysql - 如何创建包含表内容的表的备份副本

mysql - 使用参数sequelize全文查询

php - 针对表行的全文搜索

mysql - 参数化 SQL 查询