我查询的结果有170万比 数据 
是几个表关联出来的 关联出来后随即取里面的10笔 我用order By Rand() limit 10 效率很低
请教各位 是否有别的写法 谢谢

解决方案 »

  1.   

    [1]普通方法, 效率太低SELECT * FROM table ORDER BY rand() LIMIT 10;[2] JOIN的方法:SELECT * 
    FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`) – (SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)) AS id) AS t2 
    WHERE t1.id >= t2.id 
    ORDER BY t1.id LIMIT 10;
      

  2.   

    这个我看过 不过他是对单表操作的如果我是几个表关联后用的 order by rand()
    比如select A.a1, A.a2, A.a3, B.b1, B.b2, C.c1 
    from A
    left join B on....
    left join C on....
    where ....
    order by rand() limit 10这个怎么写?
      

  3.   

    如果 查询出来的集合有一个字段是连续的就好办了select max(xx) as xx,min(yy) as yy........然后$arr = rand(yy,xx);然后 再select ...... where xxid id implode($arr)