求一条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万条数据中查询速度非常慢,现在希望能改进下
...全文
4369 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnaaa8 2018-01-04
  • 打赏
  • 举报
回复 1
先获取一共多少条数据,然后随机一个数在这个数的范围内 在limit
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()这种

20,398

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧