求一条mysql 高性能sql(千万数据量,随机获取10条,连表查询)

qq_38741240 2017-12-04 10:04:21
SELECT `a`.*,`w`.`keywords`,`w`.`reason`,`w`.`commentList`,`w`.`askeverybodyList`,w.itemId as taobao_item_info_itemId FROM `taobao_try_item` `a` LEFT JOIN `taobao_item_info` `w` ON `a`.`itemId`=`w`.`itemId` ORDER BY rand() LIMIT 10



随机获取10条数据,但是现在这条语句在1200万条数据中查询速度非常慢,现在希望能改进下
...全文
3189 7 1 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cnaaa8 2018-01-04
先获取一共多少条数据,然后随机一个数在这个数的范围内 在limit
  • 打赏
  • 举报
回复 1
bugorz 2017-12-08

$max = "SELECT count(*) FROM TABLE_NAME";

//随机数池
$rand_pool = [];

while(count($rand) < 10){
    $rand = mt_rand(1, $max);
    if(!in_array($rand, $rand_pool)){
         $rand_pool[] = $rand;
    }
}
//要预先处理下$rand_pool
$sql = "SELECT * FROM TABLE_NAME WHERE `id` in  {$rand_pool}"; 
  • 打赏
  • 举报
回复
蔡思岑 2017-12-07
不能先在php中设好随机的范围再去取吗。。。
  • 打赏
  • 举报
回复
Id值先算出来 然后在in
  • 打赏
  • 举报
回复
老虎爱代码 2017-12-04
ORDER BY rand() 这种写法是很低效的写法的,论坛里面有一篇关于这个的,供你参考! http://blog.csdn.net/qdujunjie/article/details/18711167
  • 打赏
  • 举报
回复
xuzuning 2017-12-04
随机等距抽样
  • 打赏
  • 举报
回复
order by rand()是mysql最恶劣的一种用法,order by rand()的执行计划可以百度一下,说实话只有最外行的人或者数据库只有几万条记录才会这么用。表有int主键,可以随机10个整数,表有日期字段,可以随机时间段,太多可以产生随机条件的方法,不要用order by rand()这种
  • 打赏
  • 举报
回复
相关推荐
发帖
PHP
加入

1.9w+

社区成员

“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
申请成为版主
帖子事件
创建了帖子
2017-12-04 10:04
社区公告
暂无公告