我有一个严重的问题。我们的Intranet越来越慢。主要原因之一似乎是缓慢的mysql查询(它出现在slow-query.log中)。每次打开Intranet站点时都会询问该查询。看起来像这样:
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;
工作时间表更大一些,最多可容纳20万行(出于测试原因,该行仅需90k)和13列。整个查询经过一个3到9个周期的循环。
有人知道如何使查询更快吗?
编辑:希望这里是EXPLAIN结果。
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
该w
表需要在上建立索引INDEX(Location, Datetime)
。这样可以提高性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句