是否可以提高此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秒才能完成并减慢我的应用程序,我可以做些什么来提高效率?我在考虑左边加入同一个表而不是使用子查询,但是我无法理解语法。任何帮助,将不胜感激。感谢
答案 0 :(得分:0)
您应该查看索引。可能遗漏:user_id, category, app
。
由于两个查询都只返回一条记录,因此它应该非常快。
基本上,索引会创建一个在多个字段上预先排序的引用表,这有助于DB在您过滤或排序时查找记录。当您不使用它们时,该数据库正在动态执行,这就是您查询花费大量时间的原因。
这是MySQL的索引官方文档: MySQL Indexes documentation
答案 1 :(得分:0)
更好的是
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
开头的索引的其他查询。