2025-04-23

關於資料庫的隨機查詢

 

隨機查詢信息 

SELECT * FROM `table` 

WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`))) 

ORDER BY id LIMIT 1; 

 

最後,再把語句完善一下,加上MIN(id)的判斷。我在最開始測試的時候,就是因為沒有加上MIN(id)的判斷,結果有一半的時間總是查詢到表中的前面幾行。 

完整查詢語句是: 

SELECT * FROM `table` 

WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`))) 

ORDER BY id LIMIT 1; 

 

SELECT * 

FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2 

WHERE t1.id >= t2.id 

ORDER BY t1.id LIMIT 1; 

 

最後在php中對這兩個語句進行分別查詢10次, 

前者花費時間 0.147433 秒 

後者花費時間 0.015130 秒 

看來采用JOIN的語法比直接在WHERE中使用函數效率還要高很多

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *