mysql - 对超过百万行进行排序的分组
问题描述
我有一个超过百万行的表。他们每个人都有一个许可证号。
我现在的查询是按许可证编号进行分组,并按计数(不同(类型))和计数(许可证编号)和日期排序。
所有带有连接的字段 - 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 具有最大总计数
- 最后按最新日期对单个记录进行排序。
解决方案
使此运行快速的唯一方法是预先聚合。您可以使用 上的触发器来执行此操作mytable
。你的写入会慢一点,但上面的查询只需要扫描一个小得多的表。
推荐阅读
- java - 如何根据倒数计时器模糊图像
- reactjs - 我怎样才能只获取没有状态的数据?
- ios - 使用 SwiftUI 时遇到一些问题(查看详细信息)
- apache-kafka - 如何启动 Zookeper
- r - 如何从ggmap获取黑白地图?
- java - 为什么我不能更改被覆盖方法的返回类型(协变返回类型除外)?
- html - 将 JSON 数组转换为 HTML 表
- css - css 动画在滚动时发生,而不是在页面加载时发生
- arrays - 如何等待带有mongodb查询的嵌套forEach语句返回函数
- android - AdMob 测试广告无法在已发布的 Android 应用版本上运行