更好地搜索具有170,000行的SQL表

问题描述 投票:2回答:3

我有170,000行的SQL表。每行有一列长度约为600个字符的字符串。

我想列出包含搜索关键字的所有行。

使用LIKE '% keyword %'大约需要1000毫秒。我的应用程序是使用Eloquent在Laravel中构建的。

您有什么想法对于高性能的最佳方式吗?我需要有选项来搜索区分大小写/敏感,重音敏感/重要,精确短语或随机顺序的多个单词。因此,当我尝试TNTSearch时,性能非常出色,但没有那么多选择。

此外,我尝试在我的查询中创建索引和匹配功能,但也有一些限制。

php sql laravel
3个回答
2
投票

在您希望能够搜索的列上定义FULLTEXT索引,以大大提高搜索速度。仅适用于MyISAM和InnoDB表。

谷歌它还是看看here


2
投票

类似以通配符开头的查询无法利用索引。随着表格规模的增长,性能将继续下降。

我建议使用以下选项之一来提高性能:

  1. 你可以使用Laravel Scout

Laravel Scout提供了一个简单的基于驱动程序的解决方案,用于为您的Eloquent模型添加全文搜索。

开箱即用Scout支持Algolia,但也有其他驱动程序,包括TNTSearch

https://github.com/teamtnt/laravel-scout-tntsearch-driver


  1. 您可以使用全文索引来提高搜索性能。

Eloquent不支持开箱即用的全文搜索,但有一些第三方软件包可以添加支持。

例如:


0
投票

我建议将SOLR与日光浴使用:https://solarium.readthedocs.io/en/latest/

© www.soinside.com 2019 - 2024. All rights reserved.