是否有可能提高此SQL语句的速度?
SELECT
(SELECT
time
FROM
log
WHERE
user_id = 'name'
AND category = 'Login'
ORDER BY time DESC
LIMIT 1 , 1) AS login_time,
(SELECT
time
FROM
log
WHERE
user_id = 'name'
AND category = 'Logout'
AND app = 'RES'
ORDER BY time DESC
LIMIT 1) AS res_logout_timea
目前需要10-16秒才能完成和放慢我的应用程序,这是我可以采取的措施来提高效率吗?我正在考虑左它本身加入同一张桌子,而不是使用子查询,但我无法删除语法。任何帮助,将不胜感激。谢谢
更好的是
INDEX(user_id, category, time) -- for the 1st subquery
INDEX(user_id, category, app, time) -- for the 2nd subquery
time
列必须是最后的;其他列的顺序无关紧要。例如,您可能有这两个
INDEX(user_id, category, time) -- for the 1st subquery
INDEX(app, user_id, category, time) -- for the 2nd subquery
因此,从app
开始的其他查询需要索引。
您应该查看索引。可能缺少:user_id, category, app
。由于两个查询都只会返回一个记录,因此应该非常快。
基本上,索引创建一个在几个字段上预购的参考表,这有助于DB过滤或订购时查找记录。当您不使用它们时,该数据库正在即时进行,这就是为什么您查询需要花费大量时间的原因。
这是MySQL的官方文档索引:mysql索引文档