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

相關文章
相關標籤/搜索