有没有可能提高这条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秒来完成和减慢我的应用程序,我可以做些什么来提高效率?我在考虑左连接同一个表本身,而不是使用子查询,但我不能得到语法。任何帮助都将不胜感激。谢谢
发布于 2017-07-04 06:24:13
更好的是
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开头的索引的一些其他查询。
发布于 2017-06-26 21:32:31
你应该看看你的索引。可能缺少:user_id, category, app。由于两个查询都只返回一条记录,因此速度应该非常快。
基本上,索引创建了一个在多个字段上预先排序的引用表,这有助于数据库在您进行筛选或排序时查找记录。当您不使用它们时,数据库会在运行中执行此操作,这就是查询耗费大量时间的原因。
以下是来自MySQL的官方索引文档:MySQL Indexes documentation
https://stackoverflow.com/questions/44760910
复制相似问题