一个文章表,字段有 id,title,content,uid,category_id,update_time
文章有400多万条,如何随机20条uid=5并且category_id=1的文章。
sellect id,title,update_time from article where uid=5 and category_id=1 ORDER BY RAND() LIMIT 20
这样查询的话,好像效率低,时间长。有好办法吗?
一个文章表,字段有 id,title,content,uid,category_id,update_time
文章有400多万条,如何随机20条uid=5并且category_id=1的文章。
sellect id,title,update_time from article where uid=5 and category_id=1 ORDER BY RAND() LIMIT 20
这样查询的话,好像效率低,时间长。有好办法吗?
鉴于大数据使用order by rand() 来获取随机数的话,这个效率确实非常低效的。需要把所有纪录都放到一个临时表,然后给一个随机索引,再返回所需要的行数,来了一个全表扫描。
楼上都给出了一些SQL方案,我这里给一个带程序相关的:
可以使用程序先随机生成10个id纪录,从max(id),min(id)中间生成
mt_rand($min, $max)
然后再 select * from article where id in(1,3,5,...)
通过程序控制随机数。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
参考:http://jan.kneschke.de/projec...
选一行可以用:
基本思想是,先生成 id ,然后直接用 id 选择行。
选多行的话,可以执行多次。
文章里有关于不连续 id (会导致概率不均匀),与一次选取多行的讨论。