分享

mysql怎样高效率随机获取n条数据

 jinjiang9 2018-06-25

ID连续的情况下(注意不能带where,否则结果不好):

  1. SELECT *  
  2. FROM `mm_account` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `mm_account`)) AS id) AS t2  
  3. WHERE t1.id >= t2.id  
  4. ORDER BY t1.id ASC LIMIT 4;  

ID不连续的情况下:

  1. SELECT * FROM `mm_account`   
  2. WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `mm_account`)))  and city="city_91" and showSex=1  
  3. ORDER BY id LIMIT 4;  

假设你的表叫做mm_account,并且有一个字段叫id。最快的方法如下(随机获取5条):

  1. SELECT * FROM mm_account WHERE id >= ((SELECT MAX(id) FROM mm_account)-(SELECT MIN(id) FROM mm_account)) * RAND() + (SELECT MIN(id) FROM mm_account) limit 5;  

如果带where语句,上面就不适合了。带where语句请看下面:

  1. SELECT *  
  2. FROM `mm_account` AS t1 JOIN (SELECT ROUND(RAND() * (  
  3. (SELECT MAX(id) FROM `mm_account` where id<1000 )-(SELECT MIN(id) FROM `mm_account` where id<1000 ))+(SELECT MIN(id) FROM `mm_account` where id<1000 )) AS id) AS t2  
  4. WHERE t1.id >= t2.id  
  5. ORDER BY t1.id LIMIT 5;  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多