我有一个非常大的表(超过 10M 甚至 100M 记录),其中包含以下模式:
id int 主键,规则 int
并希望为每个规则选择一个随机条目。我尝试了这个查询,但这需要很长时间(treenode 是表的名称):
SELECT tmp.id,tmp.rule FROM treenode
LEFT JOIN (SELECT * FROM treenode ORDER BY RAND()) tmp ON (treenode.rule = tmp.rule)
GROUP BY tmp.rule;
将数据作为哈希表保存在内存中会占用大量内存。另一种选择是从数据库中获取每个组并选择一个随机条目。同样,由于组的数量约为 100k,将这些数量的查询发送到数据库需要很长时间。
更新:我可以补充一点,这张表只填了一次,不会有任何变化。id 和 rule 有漏洞。