在 MySql 中产生随机数的方法是 rand( ) 函数。能够利用这个函数与 order by 一块儿完成随机抽取某些行的功能mysql
mysql> select count(1) from sys_log; +----------+ | count(1) | +----------+ | 69177 | +----------+ //获取十条随机数据 select * from sys_log order by RAND() limit 10; 10 rows in set (1.47 sec)
当数据表内容过多的时候上面的查询会比较耗时,能够进一步优化sql
select a.* from sys_log a inner join(select id from sys_log order by RAND() limit 10) b on a.id=b.id; 10 rows in set (0.34 sec)
有些人可能会错把 inner join 写成 left join ,这二者的执行效率是有区别的函数
select a.* from sys_log a left join(select id from sys_log order by RAND() limit 10) b on a.id=b.id; 10 rows in set (2.58 sec)
left join在任何场景下都不会比inner join的执行效率高 由于left join除了须要全部inner join的结果集之外还须要左表的全部没有关联上的数据。
left join除了要求关联字段有索引之外,最好将小表做为左表,由于检索的循环次数更少,前提是你的业务逻辑没问题,由于不一样的写法逻辑是不同的优化