一、作用與用法
orderbyrand() 函數可以隨機排序 MySQL 查詢結果的行。對於那些需要隨機取數據庫里的一些記錄,然後按照自己的需求排序的情況下,可以使用 orderbyrand() 函數。
該函數的用法如下:
SELECT * FROM table
ORDER BY RAND();
可以看出,該函數可以在 SELECT 語句的 ORDER BY 子句中使用。需要注意的是,如果該函數在一個大表中需要排序的情況下,會有比較差的性能表現。
二、效率問題
對於 orderbyrand() 函數,隨機排序會讓 MySQL 數據庫服務極度受損,查詢返回的結果可能會很慢。其主要原因是,當查詢結果集較大時,在隨取隨設的情況下,優化器無法對該場景進行優化,從而無法使用索引,執行效率會變低。
當表的數據行較少,如小於 1000 條的時候,orderbyrand() 函數效果還是比較好的,畢竟 MySQL 會按照表的大小選擇不同建立臨時表的方式,同時加上優化器的選擇算法,儘可能地使詢最優。
當我們的需求需要查詢整個大表的數據並且需要隨機取出一部分,然後再根據其他條件進行排序,我們可以採取以下的方式:
SELECT *
FROM ( SELECT * FROM big_table WHERE some_condition LIMIT 10000 )
ORDER BY RAND() LIMIT 100;
這裡我們首先對大表進行一些條件限制和篩選,然後在這個限制過的結果集上進行 randomly 的排序,然後再限制取前面一部分,這樣效率會更高。
三、其他用法舉例
orderbyrand() 函數並不只是被用於簡單的排序,他還可以被用於數據的隨機分組等有效地需求情況。下面我們來舉一個簡單的例子:
SELECT name, address, email FROM members
WHERE gender='M'
ORDER BY RAND()
LIMIT 5;
這裡我們從 members 表裡選出所有性別為男的數據,然後再進行隨機排序,最後選取前 5 個記錄,這樣我們可以來隨機篩選出 5 個男性成員信息。
四、小結
上文介紹了 SQL 中orderbyrand() 函數的作用、用法、效率問題和一些其他用法的舉例。雖然該函數有着明顯的缺點,但我們還是可以在一些特殊的情況下使用它來達到自己的需求。在實際的開發過程中,需要我們結合自身的實際情況靈活使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152809.html
微信掃一掃
支付寶掃一掃