一直以為mysql隨機查詢(xún)幾條數據,就用
就可以了。
但是真正測試一下才發(fā)現這樣效率非常低。一個(gè)15萬(wàn)余條的庫,查詢(xún)5條數據,居然要8秒以上
查看官方手冊,也說(shuō)rand()放在ORDER BY 子句中會(huì )被執行多次,自然效率及很低。
You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
搜索Google,網(wǎng)上基本上都是查詢(xún)max(id) * rand()來(lái)隨機獲取數據。
但是這樣會(huì )產(chǎn)生連續的5條記錄。解決辦法只能是每次查詢(xún)一條,查詢(xún)5次。即便如此也值得,因為15萬(wàn)條的表,查詢(xún)只需要0.01秒不到。
上面的語(yǔ)句采用的是JOIN,mysql的論壇上有人使用
我測試了一下,需要0.5秒,速度也不錯,但是跟上面的語(yǔ)句還是有很大差距??傆X(jué)有什么地方不正常。
于是我把語(yǔ)句改寫(xiě)了一下。
這下,效率又提高了,查詢(xún)時(shí)間只有0.01秒
最后,再把語(yǔ)句完善一下,加上MIN(id)的判斷。我在最開(kāi)始測試的時(shí)候,就是因為沒(méi)有加上MIN(id)的判斷,結果有一半的時(shí)間總是查詢(xún)到表中的前面幾行。
完整查詢(xún)語(yǔ)句是:
最后在php中對這兩個(gè)語(yǔ)句進(jìn)行分別查詢(xún)10次,
前者花費時(shí)間 0.147433 秒
后者花費時(shí)間 0.015130 秒
看來(lái)采用JOIN的語(yǔ)法比直接在WHERE中使用函數效率還要高很多。
聯(lián)系客服