如何慢是 「非常緩慢」,在幾秒鐘?
您的查詢速度較慢的原因很可能是您沒有在name
上放置索引。 2000行對於MySQL來說應該是小菜一碟。
另一個可能的原因是您在SELECT
子句中有很多列。在這種情況下,我假設爲在排序這個大的結果集之前,MySQL引擎首先將所有這些數據複製到臨時表中。
我勸下面,讓您在使用索引只工作,只要可能:
SELECT userid, name, pic
FROM tbl_mst_users
JOIN (
-- here, MySQL works on indexes only
SELECT userid
FROM tbl_mst_users
WHERE name LIKE 'queryStr%'
ORDER BY RAND() LIMIT 5
) AS sub USING(userid); -- join other columns only after picking the rows in the sub-query.
這種方法是有點好轉,但仍不能很好地擴展。然而,小桌子應該足夠了(2000排確實很小)。
link provided by @user1461434很有意思。它描述了一個性能幾乎不變的解決方案。唯一的缺點是它一次只返回一個隨機行。
你的標題應該是快速的MySQL查詢隨機選擇不同的用戶名代替正因爲n是5這裏 – 2012-06-17 05:05:24