MySQL是一款開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),能夠進(jìn)行高效的數(shù)據(jù)存儲和快速的數(shù)據(jù)檢索。其中,隨機(jī)取出數(shù)據(jù)的功能具有很大的實(shí)用性,下面介紹MySQL如何實(shí)現(xiàn)隨機(jī)查詢。
# 隨機(jī)獲取一條數(shù)據(jù) SELECT * FROM table_name ORDER BY RAND() LIMIT 1; # 隨機(jī)獲取N條數(shù)據(jù) SELECT * FROM table_name ORDER BY RAND() LIMIT N;
其中,ORDER BY RAND()是關(guān)鍵,它能夠?qū)?shù)據(jù)隨機(jī)排序,LIMIT則是限定獲取的數(shù)據(jù)條數(shù)。
但是,隨著數(shù)據(jù)量的增加,隨機(jī)查詢會變得越來越慢。這時(shí)可以使用更高效的方法,如:
# 獲取隨機(jī)ID,然后根據(jù)ID取出數(shù)據(jù) SELECT * FROM table_name WHERE ID >= (SELECT FLOOR(MAX(ID) * RAND()) FROM table_name) ORDER BY ID LIMIT N;
以上操作先通過MAX函數(shù)獲取最大ID,再乘以RAND()生成一個(gè)隨機(jī)數(shù),通過FLOOR函數(shù)將結(jié)果向下取整轉(zhuǎn)為整數(shù)ID,然后根據(jù)ID獲取數(shù)據(jù)。
除此之外,也可以使用UNION方法取出隨機(jī)數(shù)據(jù)。
# 獲取N條隨機(jī)數(shù)據(jù) (SELECT * FROM table_name WHERE ID >= (SELECT FLOOR(MAX(ID) * RAND()) FROM table_name) ORDER BY ID LIMIT N) UNION (SELECT * FROM table_name WHERE ID< (SELECT FLOOR(MAX(ID) * RAND()) FROM table_name) ORDER BY ID LIMIT N);
這其中包含兩條SQL語句,通過UNION將結(jié)果合并返回。
下一篇mysql 集群