「非常に遅い」とは、秒単位でどれくらい遅いですか?
クエリが遅くなる理由は、 にインデックスを配置していない可能性が最も高いですname
。2000 行は、MySQL が処理するのに簡単なはずです。
もう 1 つの考えられる理由は、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 行は小さいです)。
@ user1461434 が提供するリンクは非常に興味深いものです。パフォーマンスがほぼ一定のソリューションについて説明します。唯一の欠点は、一度に 1 つのランダム行しか返さないことです。