我有一個非常大的表(超過10M甚至100M的記錄)使用此模式:在一個大表中選擇每組隨機排
ID INT主鍵,排除INT
,並希望爲每個規則選擇一個隨機條目。我想這個查詢,但是這需要很長的時間(樹節點是表的名稱):保持數據
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,因此將這些查詢數量發送到數據庫需要很長時間。
更新: 我可以補充說,這個表只填充一次,它不會有任何改變。身份證和規則在他們中有洞。
根據您的數據的具體情況,各種優化都是可能的。閱讀它:http://jan.kneschke.de/projects/mysql/order-by-rand/ – goat
這是更多關於從表中隨機輸入不是每組 –