私は80,000以上のレコードを持つテーブルを持っています。これはシステムと呼ばれます。私はまた別のテーブルを持っています。私のmysqlステートメントを最適化! - RAND()TOO SLOW
システムテーブルからレコードをランダムに選択するには、私のステートメントが必要です。このIDは、現行のユーザーIDの下のテーブルの下にまだリストされていません。だからここ
は私が持っているものです。
SELECT system.id,
system.username,
system.password,
system.followed,
system.isvalid,
follows.userid,
follows.systemid
FROM system
LEFT JOIN follows ON system.id = follows.systemid
AND follows.userid = 2
WHERE system.followed = 0
AND system.isvalid = 1
AND follows.systemid IS NULL
ORDER BY RAND()
LIMIT 200
は、今ではそれもそれが選択したレコードを持つ手でジョブの処理を開始する前に、それは全体分ほどかかりますことを除いて、完全にwotks。この時間までにスクリプトは通常ooutを実行し、何も起こりません。
誰かが私にこれを再加工する方法を示すことができるので、同じ考えが行われますが、それはrandによる注文を使用していませんか?これは物事を一気に減速させるようです。
ありがとうございます!
JOINフィールドにはどのようなインデックスがありますか?それは大きなボトルの首になることができます。 – dnagirl
あなたは何を意味するかわからない... – Brandon
@Brandonこれについて少し遅れていることは分かっていますが、これを行うための半単純化した方法をお望みなら、サブクエリに入れることができます。詳細はこちらhttp://stackoverflow.com/questions/25361158/mysql-select-random-on-large-table-order-by-score/25364339?noredirect=1#comment39644652_25364339 –