MySql 巧用 rand( )获取随机记录

在 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除了要求关联字段有索引之外,最好将小表做为左表,由于检索的循环次数更少,前提是你的业务逻辑没问题,由于不一样的写法逻辑是不同的优化

相关文章
相关标签/搜索