背景
我的表discussion由数以十亿计的行和数百万不同的topic组成:
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | int(11) | No | PRI | NULL | |
| topic | varchar(32) | YES | MUL | NULL | |
| content | longtext | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+问题
我想要前10个主题(按提到的时间排列),并且按主题对整个数据集进行排序需要几分钟(有数百万个不同的主题)。
现有的SQL:
select (select uuid()) id, topic, count(*) heat
from discussion
group by topic order by heat desc limit 0, 10问题
MySQL中是否有一种方法可以在不对整个数据集进行排序(如选择排序或堆排序)的情况下获得前10名。
或者还有其他方法可以在几秒钟内完成这个任务?
发布于 2018-09-30 03:02:41
如果您想要顶级 10,MySQL将让首先对整个数据集进行排序。
没有别的办法了。
使用柱状存储可以获得更好的性能,或者如果用例允许的话,使用排序集的Redis缓存(google: redis领导板,这是一个典型的用例)。
https://stackoverflow.com/questions/52574225
复制相似问题