【发布时间】:2020-10-08 15:48:44
【问题描述】:
你好我今天早上问了一个问题,我意识到问题不是我在找的地方 (here the original question)
我有这个查询可以从地址簿中随机生成注册表。
SELECT * FROM address_book ab
WHERE
ab.source = "PB" AND
ab.city_id = :city_id AND
pb_campaign_id = :pb_campaign_id AND
ab.id NOT IN (SELECT address_book_id FROM calls WHERE calls.address_book_id = ab.id AND calls.status_id IN ("C","NO") OR (calls.status_id IN ("NR","OC") AND TIMESTAMPDIFF(MINUTE,calls.updated_at,NOW()) < 30))
ORDER BY RAND()
LIMIT 1';
但我注意到“按 rand () 排序”需要超过 50 秒,并且在大型表 (100k +) 上使用高达 25-50% 的 CPU,所以我在这里寻找解决方案,但我没有找到任何有效的方法。 注意:id 不是自增的,可能会有差距
有什么想法吗?
【问题讨论】:
-
请定义效果不太好
-
@GMB 已编辑,抱歉。
-
您需要仅使用 SQL 的解决方案,还是可以使用其他语言来帮助解决这个问题?
-
@TomRevell SQL 更好,但(如果可能)php 解决方案是有效的