首页 > 解决方案 > 对超过百万行进行排序的分组

问题描述

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

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

所有带有连接的字段 - 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 唯一)按以下顺序排序:

标签: mysqlsqlgroup-byquery-optimization

解决方案


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


推荐阅读