提高子查询sql语句(mysql)的速度
是否可以提高此sql语句的速度提高子查询sql语句(mysql)的速度,mysql,database,performance,Mysql,Database,Performance,是否可以提高此sql语句的速度 SELECT (SELECT time FROM log WHERE user_id = 'name' AND category = 'Login' ORDER BY time DESC LIMIT 1 , 1) AS login_time, (SELECT
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秒才能完成并减慢我的应用程序速度,我能做些什么来提高效率?我想左键连接同一个表本身,而不是使用子查询,但我无法理解语法。任何帮助都将不胜感激。谢谢你应该看看你的索引。可能缺少:
用户id、类别、应用程序
。
因为两个查询都只返回一条记录,所以应该非常快
基本上,索引在几个字段上创建一个预先排序的引用表,这有助于DB在筛选或排序时查找记录。当您不使用它们时,该数据库正在运行,这就是为什么查询需要花费大量时间的原因
以下是MySQL索引的官方文档:
更好的是
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
开头的索引的查询工作,谢谢。你能简单地解释一下添加索引的作用或提供一个有用的链接吗?这一变化使你的问题缺少一个答案。请不要删除您的代码。谢谢。有不同类型的子查询;我认为这不是一个骗局。(因此我决定重新开放)