› 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 · 3560 views
    This topic created in 1835 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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