最近在作接口測試的時候,測試數據是從數據庫查詢的,可是當須要併發屢次去調用接口時,若是sql只是單純的進行了limit取值,那併發的時候確定會每條數據都同樣。html
所以,研究了下sql隨機取一條數據的寫法,從而用大量不一樣數據去進行併發的接口性能測試mysql
原文:https://www.cnblogs.com/my_life/articles/7827233.htmlsql
三種方法:數據庫
(1)ORDER BY RAND()併發
寫法:SELECT * FROM 表A ORDER BY RAND() LIMIT 1性能
缺點:rand()放在ORDER BY 子句中會被執行屢次,天然效率極低,mysql官方不提倡測試
(2)max(id) * rand() + joinhtm
寫法: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;blog
百度了不少,大佬們都認爲採用JOIN的語法是最優的接口
(3)max(id) * rand()
寫法:SELECT * FROM 表A WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM 表A ) ORDER BY id LIMIT 1;
此種寫法的效率是介於前面兩種之間