私は深刻な問題があります。私たちのイントラネットは遅くなり、遅くなっています。主な理由の1つは遅いmysql-query(slow-query.logに表示される)のようです。 イントラネットサイトを開くたびに、そのクエリが尋ねられます。 それは次のようになります
複数の結合、max()とグループによる遅いMySQLクエリ
SELECT w.Datetime, w.User_ID, w.Status, e.Lastname
FROM worktimes AS w
INNER JOIN employees AS e ON w.User_ID=e.ID
RIGHT JOIN (SELECT max(Datetime) AS Datetime, User_ID
FROM worktimes
WHERE Datetime>".$today." // variable of today 0.00 o'clock
AND Location='".$llocation['ID']."' // variable of one of 9 locations
GROUP BY User_ID) AS v
ON v.User_ID=w.User_ID AND w.Datetime=v.Datetime
ORDER BY e.Lastname;
worktimesテーブルは、最大200Kの行(試験理由瞬時90K)と13列と幾分大きいです。クエリ全体が3〜9サイクルのループを通過します。
誰かがクエリをより速くする方法を考えていますか?
編集:ここにEXPLAIN-resultが欲しい。
あなたが二回
次のようにあなたがそれを行うことができworktimesを使用する必要がいけない
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 44006 Using temporary; Using filesort
1 PRIMARY w ALL NULL NULL NULL NULL 92378 Using where
1 PRIMARY e eq_ref PRIMARY,ID PRIMARY 4 ais_v1.w.User_ID 1 NULL
2 DERIVED worktimes ref Location Location 767 const 44006 Using index condition; Using where; Using temporary; Using filesort
クエリの 'EXPLAIN SELECT'を実行できますか? – Daan
さらに詳しい情報がありますか?さて、私は質問を更新します。 –
いいえ、私はそれの前に 'EXPLAIN'と正確なクエリを実行し、ここに結果を掲載することを意味しません。 – Daan