最近在做接口測試的時候,測試數據是從數據庫查詢的,但是當需要並發多次去調用接口時,如果sql只是單純的進行了limit取值,那並發的時候肯定會每條數據都一樣。
因此,研究了下sql隨機取一條數據的寫法,從而用大量不同數據去進行並發的接口性能測試
原文:https://www.cnblogs.com/my_life/articles/7827233.html
三種方法:
(1)ORDER BY RAND()
寫法:SELECT * FROM 表A ORDER BY RAND() LIMIT 1
缺點:rand()放在ORDER BY 子句中會被執行多次,自然效率極低,mysql官方不提倡
(2)max(id) * rand() + join
寫法:select id from table 表A join (select round(rand()*(select max(id ) from table)) as idd) as 表B on 表A.id>表B.idd limit 1;
百度了很多,大佬們都認為采用JOIN的語法是最優的
(3)max(id) * rand()
寫法:SELECT * FROM 表A WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM 表A ) ORDER BY id LIMIT 1;
此種寫法的效率是介於前面兩種之間