【问题标题】:ORDER BY COUNT is slowORDER BY COUNT 很慢
【发布时间】:2023-02-01 15:06:02
【问题描述】:

一张桌子 (照片标签) 由两个外键列 (感光体,标签).我想根据标签获取最相关的照片。

有 400 万张照片带有 5-10 个标签。例如,photoid10009有6个标签。我需要具有相似标签的照片。

SELECT photoid FROM phototag WHERE photoid != 10009 AND tagid IN (21192, 3501, 35286, 21269, 16369, 48136) GROUP BY photoid ORDER BY COUNT(photoid) DESC LIMIT 24;

没有按计数排序查询速度超快。

我试过但没有结果:

  • 优化表
  • 根据两列制作主键
  • 单独索引列
  • 将 InnoDB 切换到 MyISAM

【问题讨论】:

    标签: mysql sql query-optimization


    【解决方案1】:

    众所周知,计数查询难以优化。但是,我们应该能够索引 WHERE 子句。考虑尝试以下复合索引:

    CREATE INDEX idx ON phototag (photoid, tagid);
    

    该索引涵盖 WHERE 子句以及 SELECT,并且在与 GROUP BY 聚合时应该可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-22
      • 2016-10-23
      • 2011-09-11
      • 2017-07-13
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多