我有一个包含170,000行的SQL表。每行都有一列长约600个字符的字符串。
我想列出包含搜索关键字的所有行。
使用LIKE '% keyword %'
大约需要1000毫秒。我的应用程序使用Eloquent在Laravel中构建。
您有什么想法对性能最好吗?我需要有选项来搜索区分大小写/敏感,重音敏感/重要,精确短语或随机顺序的多个单词。因此,当我尝试TNTSearch时,性能非常出色,但没有那么多选择。
另外,我尝试在查询中创建索引和匹配功能,但也存在一些限制。
答案 0 :(得分:2)
在您希望能够搜索的列上定义FULLTEXT
索引,以大大提高搜索速度。仅适用于MyISAM和InnoDB表。
谷歌或看看here
答案 1 :(得分:2)
类似以通配符开头的查询无法利用索引。随着桌面规模的增长,性能将继续下降。
我建议使用以下选项之一来提高性能:
Laravel Scout提供了一个简单的基于驱动程序的解决方案,可以为您的Eloquent模型添加全文搜索。
开箱即用Scout支持Algolia,但也有其他驱动程序,包括TNTSearch
https://github.com/teamtnt/laravel-scout-tntsearch-driver
Eloquent不支持全文搜索,但有一些第三方软件包可以添加支持。
例如:
答案 2 :(得分:0)
我建议将SOLR与日光浴场结合使用:https://solarium.readthedocs.io/en/latest/