2018-12-10 09:32:41 3939次浏览 8条回答 0 悬赏 295 金钱

最近在做个项目,里面有个数据表,数据多达100W条,需求是通过编号code或者name来查询到相关数据,但是都是模糊查询,每次查询都得花上4秒左右,分页后点击下一页也得4秒,太慢了,用的like查询,各位大佬有什么办法可以快一点吗

  • 回答于 2018-12-10 10:37 举报

    建议使用搜索引擎索引,本站使用的 elasticsearch

    2 条回复
    回复于 2018-12-10 17:03 回复

    好的,我去学习下,谢谢舰长

    回复于 2018-12-11 12:46 回复

    舰长这个搜索真心不懂,搜出来的头不是头,文章不是文章的,把动态啥的都搜索出来了。

    动态都没啥解决方法的,搜出来没什么意义,而且还排在最前面

    比如我搜索数据库查询 我希望找到的是 帖子和问答,其他的我毫无兴趣,看到一整页都是动态里面的。我都不想看了,到此我都很少用本站的搜索功能,有问题都直接问

  • 回答于 2018-12-10 11:11 举报

    SPHINX

    1 条回复
    回复于 2018-12-10 17:03 回复

    谢谢大佬!

  • 回答于 2018-12-10 11:40 举报

    我建议使用tidb

    1 条回复
    回复于 2018-12-10 17:03 回复

    谢谢大佬!

  • 回答于 2018-12-10 15:21 举报

    才一百万并不是很大!没有必要加什么所以插件!加上去了 插件需要配置还需要维护!100万就卡成狗,那说明,你们的硬件是真的不行了!首先你们用的是自建的mysql吗!

    3 条回复
    回复于 2018-12-10 17:02 回复

    是的,自建的。。。

    回复于 2018-12-11 11:50 回复

    那就不要麻烦了!100万数据真的不多!根本不需要优化整那么麻烦! 你可以给公司建议一下,使用阿里云的数据库!可以升级的,用的是固态盘!一键就解决了!

    回复于 2018-12-13 10:31 回复

    好的,非常感谢大佬

  • 回答于 2018-12-10 17:06 举报

    100万而已 如果增量不是特别大的话 同时你这俩字段是char、varchar和text类型的话,可以试试mysql原生的fulltext索引,无附加组件,少量修改代码就可完成模糊搜索。如果增量很大,频率很高,可以尝试第三方组件,比如es、sphinx之类。我个人经验告诉我,如非特别必要,尽量保持技术栈的简单,不然就是运维地狱。

    5 条回复
    回复于 2018-12-10 17:07 回复

    了解了,我今晚试试,谢谢大佬

    回复于 2018-12-10 21:53 回复

    大佬,试了fulltext没用。。主要是我的模糊查询,可能每次会取几千条数据出来。。。感觉还是太慢了

    回复于 2018-12-11 09:16 回复

    为什么每次要查几千条 ,用batch呀

    回复于 2018-12-11 09:25 回复

    因为是模糊查出来一些数据,再让管理员去选择,现在搞定了

    回复于 2018-12-11 09:46 回复

    可以根据搜索先取ID,然后根据分页取全部结果,一次性取全部内容,消耗都在io上了,肯定慢。

  • 回答于 2018-12-14 16:16 举报

    最近刚经历了数据库崩盘,建议还是花钱买数据库服务器吧,运维日志看起来也方便

  • 回答于 2019-09-17 17:47 举报

    仅供参考(我估计你没合理设置索引,要么索引没有生效):
    WeixinCourse::find()
    ->where(['LIKE', 'name', $xxxx.'%', false])//%这样放,可以使name索引(设置了索引的话)生效
    ->andWhere(['status'=>1])
    ->orWhere(['LIKE', 'description', $xxxxX.'%', false])//%这样放,可以使description索引(设置了索引的话)生效
    ->all();

  • 回答于 2023-03-06 10:12 举报
    对于大量数据的模糊查询,使用 LIKE 查询是比较慢的,因为它需要扫描整个数据表。以下是几种可以优化查询速度的方法:
    
        使用全文本索引:如果您使用的是 MySQL 或者 PostgreSQL,可以考虑使用全文本索引来加速模糊查询。全文本索引可以在查询时快速定位到匹配的文本,从而提高查询速度。
    
        使用缓存:如果您的数据表不经常更新,可以考虑使用缓存来提高查询速度。例如,将查询结果缓存在 Redis 或 Memcached 中,下次查询时从缓存中读取结果,而不是每次都重新查询数据库。
    
        数据分片:如果您的数据表非常大,可以考虑将数据分片存储在多个服务器上,每次查询只查询相关分片,以减少查询时间。
    
        数据库优化:您可以对数据库进行优化,例如添加索引、分区、使用存储过程等来提高查询速度。
    
        使用搜索引擎:如果您需要更高级的搜索功能,可以考虑使用专业的搜索引擎,例如 Elasticsearch 或 Solr。这些搜索引擎可以对文本进行高级搜索和分析,可以快速返回匹配的结果。
    
    以上是一些可行的方案,您可以根据具体情况进行选择。
    
    
您需要登录后才可以回答。登录 | 立即注册
zcx147716565
CEO

zcx147716565 广州

注册时间:2017-03-10
最后登录:2021-01-12
在线时长:69小时38分
  • 粉丝9
  • 金钱12500
  • 威望20
  • 积分13390

热门问题