次のクエリは、完了するまでに25秒以上かかります。
SELECT c.* , (c.age+ (UNIX_TIMESTAMP()-UNIX_TIMESTAMP(c.newdate))) AS ranking , IF(uc.id_user = 7,1,0) AS favorite
FROM c
LEFT OUTER JOIN uc ON uc.id_cluster = c.id AND uc.id_user = '7'
LEFT OUTER JOIN d ON d.id_cluster = c.id
LEFT OUTER JOIN dt0 ON dt0.id_document = d.id
LEFT OUTER JOIN t0 ON dt0.id_term = t0.id
WHERE MATCH(t0.normalizacion) AGAINST ('term' IN NATURAL LANGUAGE MODE)
GROUP BY c.id
ORDER BY ranking ASC
LIMIT 30
インデックス:
- c.idプライマリ
- c.age INDEX
- c.newdate INDEX
- uc.id_user、uc.id_cluster PRIMARY
- d.idプライマリ
- d.id_cluster INDEX
- dt0.id_document、dt0.id_term PRIMARY
- dt0.id_document INDEX
- dt0.id_term INDEX
- t0.idプライマリ
- t0.normalizacion全文
ORDER BY句を削除すると、2秒しかかかりません。
検索してみたところ、GROUPBYとORDERBYの両方に同じインデックスを使用する必要があることがわかりました(c.idによる順序付けを試し、2〜3秒かかりました)。クエリをより高速に変更するにはどうすればよいですか?