【问题标题】:Group by with sort on more than million rows对超过百万行进行排序的分组
【发布时间】:2020-05-02 21:41:39
【问题描述】:

我有一个超过百万行的表。他们每个人都有一个许可证号。

我现在的查询,根据许可证号进行分组,并按计数(不同(类型))和计数(许可证号)和日期排序。

所有带有连接的字段 - license_no 或 date 都被索引。 但是我需要 5 秒才能返回结果。

如何加快性能。理想情况下,结果不应超过一秒钟。 查询:

SELECT `license_no`, 
COUNT(DISTINCT(type)) AS gdid, 
COUNT(id) AS cdid,
max(updated_on) as maxdate
FROM `mytable` 
WHERE `license_no` >0 
GROUP BY `license_no`
ORDER BY `gdid` DESC, `cdid` DESC, maxdate DESC LIMIT 12

我要实现的逻辑:

我有一个汽车清单(百万+记录)。

我想找到所有独特的汽车(由 license_no 唯一) 排序方式:

  • license_no 具有最大数量的不同类型
  • license_no 具有最大总计数
  • 最后按最新日期对单个记录进行排序。

【问题讨论】:

  • 请说明您要实现的逻辑。您的查询格式错误,因为您在ORDER BY 中引用了updated_on,但它没有在SELECT 中定义,也不是GROUP BY 列。
  • @GordonLinoff,我已经更新了查询和我想要获取的数据。
  • 请提供SHOW CREATE TABLE 和所需输出的样本。我不明白“license_no 具有最大数量的不同类型”

标签: mysql sql group-by query-optimization


【解决方案1】:

要使此运行快速运行的唯一方法是预先聚合。您可以使用mytable 上的触发器来执行此操作。您的写入会慢一些,但上面的查询只需要扫描一个小得多的表。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
相关资源
最近更新 更多