首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提速子查询sql语句(mysql)

提速子查询sql语句(mysql)
EN

Stack Overflow用户
提问于 2017-06-26 21:28:26
回答 2查看 151关注 0票数 0

有没有可能提高这条sql语句的速度?

代码语言:javascript
复制
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秒来完成和减慢我的应用程序,我可以做些什么来提高效率?我在考虑左连接同一个表本身,而不是使用子查询,但我不能得到语法。任何帮助都将不胜感激。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-04 06:24:13

更好的是

代码语言:javascript
复制
INDEX(user_id, category, time)       -- for the 1st subquery
INDEX(user_id, category, app, time)  -- for the 2nd subquery 

time列必须是最后一列;其他列的顺序并不重要。举个例子,你可能有这两个

代码语言:javascript
复制
INDEX(user_id, category, time)       -- for the 1st subquery
INDEX(app, user_id, category, time)  -- for the 2nd subquery 

从而帮助需要以app开头的索引的一些其他查询。

票数 0
EN

Stack Overflow用户

发布于 2017-06-26 21:32:31

你应该看看你的索引。可能缺少:user_id, category, app。由于两个查询都只返回一条记录,因此速度应该非常快。

基本上,索引创建了一个在多个字段上预先排序的引用表,这有助于数据库在您进行筛选或排序时查找记录。当您不使用它们时,数据库会在运行中执行此操作,这就是查询耗费大量时间的原因。

以下是来自MySQL的官方索引文档:MySQL Indexes documentation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44760910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档