laravel - 是否针对大型数据库的搜索栏优化了“LIKE”查询?
问题描述
我的标题中有一个搜索栏,它将搜索大型企业数据库并检查该表的 4 列以查找用户搜索的相似词。
我的代码如下使用“LIKE”通过它们进行查询。因为随着项目的增长,数据库会非常大,比如 100000 多个企业,我想知道它是否经过优化?我应该考虑用其他方法在数据库中搜索类似的单词吗?
$result = Business::where('name','LIKE','%'.$search.'%')
->orWhere('description','LIKE','%'.$search.'%')
->orWhere('website','LIKE','%'.$search.'%')
->orWhere('facebook','LIKE','%'.$search.'%')
->orWhere('twitter','LIKE','%'.$search.'%')
->get();
解决方案
我不建议您使用直接 SQL 查询来实现对非常大的数据库的搜索。首先,这在 DB 上将是一个非常繁重的过程,因此会增加响应时间。
您最好使用Elastisearch之类的工具来实现这一目标。当您插入或更新记录时,您将需要做额外的事情,但从长远来看,当您查询该数据时,您将获得更好的性能。
注意:您将需要额外的服务器或服务,这可能会增加您的运行成本。但它会减少数据库的负载。
推荐阅读
- python - 在 Scikit TfidfVectorizer 中同时使用 min_df、max_df 和 max_features
- appium - 将应用程序 1 切换到应用程序 2。成功切换到Application2,但是Application2没有点击操作
- c# - 对并发包的 linq 查询偶尔会出现性能下降
- ios - BSP Dungeon Generator 给出无法修复的错误
- batch-file - 如何使用批处理脚本替换文件中的两行文本
- regex - 如何将已识别的正则表达式保存在找到模式的同一 txt 文件中的列中?
- javascript - 按下退格按钮时选择自动完成触发回发
- asp.net-web-api - Twitter 直接消息事件 API 1.1
- c++ - 在Qt中测试是QJsonObject还是QJsonArray
- powershell - 连接到安全的 Azure Service Fabric 群集时出现问题