実行に非常に長い時間がかかっています(15秒など)、これは小さなテストデータセット上にしか存在しません。特定のMySQLクエリを改善してCPU /ディスクの負荷を軽減する
私はこれを改善する助けを探しています:
describe SELECT * from people where uid in (SELECT uid2 from friends where uid1=PHP_UID_VARIABLE) order by rand() limit 1;
+----+--------------------+---------+------+---------------+------+---------+-------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+---------+------+---------------+------+---------+-------+-------+----------------------------------------------+
| 1 | PRIMARY | people | ALL | NULL | NULL | NULL | NULL | 6726 | Using where; Using temporary; Using filesort |
| 2 | DEPENDENT SUBQUERY | friends | ref | uid1,uid2 | uid1 | 8 | const | 15501 | Using where |
+----+--------------------+---------+------+---------------+------+---------+-------+-------+----------------------------------------------+
私はそれが「悪い」というのWHERE知っている - それがAに参加し、特に効率的になるだろうことはありませんランド()によって順序の両方をやっています。なぜ "人"テーブルのインデックスを使用していないのか分かりません。 "uid"は主キーであり、索引付けされています。
クエリの目的は十分に明らかにする必要がありますが、後世のために、私はuidが別のテーブルの "friends"リストと一致する人のテーブルからランダムな行を1つ選択します。
優れています。うまくいきます。ここで私のオリジナルよりも効率的なクエリを書く方法が分かります: –
@Rafiq - この回答の投票総数の下にあるチェックボックスを忘れないようにしてください。これは、この答えを正しいものとして選択し、回答者にポイントを報酬として与えます。 :) –
私はStackOverflow 'Accept Timer'がなくなるのを待っています: –