在 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除了要求關聯字段有索引之外,最好將小表做爲左表,由於檢索的循環次數更少,前提是你的業務邏輯沒問題,由於不一樣的寫法邏輯是不同的優化