MySQLが正しいフィールドにINDEX()を配置するのに少し問題があります。たとえば、次のようなクエリがあります。
SELECT m.id as mid,p.id as pid,po.* FROM m
LEFT OUTER JOIN p ON p.mid = m.id AND p.uid = 2
LEFT OUTER JOIN po ON po.mid = m.id AND po.uid = 2
ORDER BY m.date,m.time
そして、私は次のインデックスを持っています:
- m.date
- m.time
- p.mid
- p.uid
- po.mid
- po.uid
ただし、EXPLAIN
クエリを実行すると、どのキーも取得されません。ステートメントを入れようとしましFORCE INDEX
たが、MySQLはそれらを拒否し続けます(クエリに構文エラーがあると言っています)。何か案は?
編集
これがEXPLAIN
:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE m ALL NULL NULL NULL NULL 31 Using filesort
1 SIMPLE p ref mid,uid mid 5 db.m.id 1
1 SIMPLE po ref uid,mid uid 5 const 1
pとpoは現在正常に処理されていますが、mはまだ正常に処理されていないことに注意してください。mにINDEX(日付、時刻)を追加しましたが、それでも同じです。