› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
CathayChen
V2EX  ›  MySQL

MySQL 如何高效实现多条件查询,根据查询条件满足次数排序?

  •  
  •   CathayChen · Oct 28, 2021 · 3416 views
    This topic created in 1801 days ago, the information mentioned may be changed or developed.

    现在有这么一个需求,查询满足多条件的数据,条件会有很多,满足条件的次数越多排序越靠前,怎么实现呢?

    最好的情况是满足不同条件有不同的匹配分,满足条件的匹配分越高越靠前,目前能想到的方案通过在 select 里通过 if 判断是否满足给某个字段+分,这样感觉效率会很低,有没有更好的方案呢?

    15 replies  •  2021-10-29 11:10:30 +08:00
    7Qi7Qi
        1
    7Qi7Qi  
       Oct 28, 2021
    case when .... then weight1 else 0 end + case when .... then weight2 else 0 end ....
    这样?
    CathayChen
        2
    CathayChen  
    OP
       Oct 28, 2021
    @7Qi7Qi 这样效率会不会很低,目前是准备这样做的
    JKeita
        3
    JKeita  
       Oct 28, 2021
    这种不是应该上 es 吗
    shanghai1943
        4
    shanghai1943  
       Oct 28, 2021
    莫非每个条件都查一次,然后在结果里计算出现的次数?这个听起来用 MySQL 实现有点复杂。
    CathayChen
        5
    CathayChen  
    OP
       Oct 28, 2021
    @JKeita 没毛病,不能为了一个小需求就上 es 吧
    micean
        6
    micean  
       Oct 28, 2021
    如果不用 es 的话,自己来做一个索引表,按权重计算汇总一个数字用于排序,按及时性要求来设计全量或增量更新
    debuggerx
        7
    debuggerx  
       Oct 28, 2021
    https://stackoverflow.com/questions/3333665/rank-function-in-mysql

    这样的需求直接用 mysql 应该是避免不了全表扫描,效率高不到哪去的
    JKeita
        8
    JKeita  
       Oct 28, 2021
    @CathayChen 这要看你这需求的使用频率吧,如果很频繁完全可以上 es
    thetbw
        9
    thetbw  
       Oct 28, 2021   ❤️ 2
    @CathayChen 既然是小需求,就干脆砍了吧,给领导说做不了😎
    yuanshuai1995
        10
    yuanshuai1995  
       Oct 28, 2021
    @thetbw #9 没毛病 哈哈哈哈
    chenjiangui998
        11
    chenjiangui998  
       Oct 28, 2021
    全表查出来, 代码排序
    ipwx
        12
    ipwx  
       Oct 28, 2021
    你这需求是典型的全文检索算法的需求。

    对,就是让你上 ES 。
    fengpan567
        13
    fengpan567  
       Oct 28, 2021
    整不了
    fxxkgw
        14
    fxxkgw  
       Oct 28, 2021
    我是看了好多遍美团技术团队的这篇文章,感觉很受用。

    https://tech.meituan.com/2014/06/30/mysql-index.html
    SonivelY
        15
    SonivelY  
       Oct 29, 2021
    不想用 ES 的话,试试更加轻量的 mysql ngram
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2312 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 10:06 · PVG 18:06 · LAX 03:06 · JFK 06:06
    ♥ Do have faith in what you're doing.