ORDER BY RAND()
インデックスを使用できず、基本的にテーブル全体 (非常に大きくなる可能性があります) を 1 つの行を選択するためだけに並べ替えます。
より良い解決策には、MIN(id) と MAX(id) の間の乱数の生成が含まれ、それが選択したランダムな行です。テーブルが大きくなるにつれて、これはますます大きな利点になります。
ランダム ID を選択する方がはるかに効率的であるため、一度に 6 つのランダム ID を 1 つずつ選択し、それらの行を 1 つずつ検索することをお勧めします。したがって、特定の行を複数回選択する可能性があります。
すべての ID が連続していることが保証されていない場合は、ランダム ピックよりも大きい最初の ID を選択できます。したがって、擬似コードでは:
$MIN, $MAX = SELECT MIN(ID), MAX(ID) FROM winners
FOR LOOP FROM 1 to 6
$R = $MIN+RANDOM($MAX-$MIN)
$WINNER[] = SELECT * FROM winners WHERE id >= $R LIMIT 1