首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于explain的Mysql优化

基于explain的Mysql优化
EN

Stack Overflow用户
提问于 2013-11-28 01:11:40
回答 1查看 84关注 0票数 2

我有以下查询需要很长时间才能执行。我需要加快速度,但我不知道该使用什么技术。以下是查询:

代码语言:javascript
复制
SELECT 
    `User`.`id`, 
    `User`.`username`, 
    `User`.`password`, 
    `User`.`role`, 
    `User`.`created`, 
    `User`.`modified`, 
    `User`.`email`, 
    `User`.`other_user_id`, 
    `User`.`first_name`, 
    `User`.`last_name`, 
    `User`.`place_id`, 
    `Resume`.`id`, 
    `Resume`.`user_id`, 
    `Resume`.`other_resume_id`, 
    `Resume`.`other_user_id`, 
    `Resume`.`file_extension`, 
    `Resume`.`created`, 
    `Resume`.`modified`, 
    `Resume`.`is_deleted`, 
    `Resume`.`has_file`, 
    `Resume`.`is_stamped`, 
    `Resume`.`is_active` 
FROM 
    `streetofwalls`.`users` AS `User` 
    LEFT JOIN `my_database`.`attempts` AS `Attempt` 
        ON (`Attempt`.`user_id` = `User`.`id` AND `Attempt`.`test_id` != 5) 
    LEFT JOIN `my_database`.`reports` AS `Resume` 
        ON (`Resume`.`user_id` = `User`.`id`) 
WHERE 
    `Attempt`.`test_id` = 8 
    AND `Attempt`.`score` > 60 
    AND `User`.`id` IN (
        SELECT 
            `User1`.`id` 
        FROM 
            `my_database`.`users` AS User1 
            LEFT JOIN `my_database`.`tags_users` AS TagUser 
                ON (`User1`.`id`= `TagUser`.`user_id`) 
            LEFT JOIN `my_database`.`tags` AS Tag 
                ON (`TagUser`.`tag_id`= `Tag`.`id`) 
        WHERE `Tag`.`id` = (8) ) 
    AND `User`.`id` NOT IN (
        SELECT 
            `User1`.`id` 
        FROM 
            `my_database`.`users` AS User1 
            LEFT JOIN `my_database`.`tags_users` AS TagUser 
                ON (`User1`.`id`= `TagUser`.`user_id`) 
            LEFT JOIN `my_database`.`tags` AS Tag 
                ON (`TagUser`.`tag_id`= `Tag`.`id`) 
        WHERE `Tag`.`id` = (3) ) 
    AND `Resume`.`has_file` = 1 
GROUP BY `User`.`id` 
ORDER BY `Attempt`.`score` DESC;

此查询生成以下解释:

如您所见,我对这个查询有几个索引。目前,只有简历表不能被索引。是否可以在此查询的上下文中对此表进行索引?有没有其他方法可以加速这个查询,这是我没有想到的?对于它的预期功能来说,它的速度慢得令人望而却步,我已经没有想法了。感谢任何能帮上忙的人。如果还需要任何其他信息,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2013-11-28 22:51:19

尝试内部连接而不是子查询默认情况下,引导查询时不对数据运行,但跟随查询可能会对您有所帮助。

选择UseridUserusernameUserpasswordUserroleUser。D9,D10。D11,D12。D13,D26。D15,D16。D17,D18。D19,D20。D21,D22。D23,D24。D25,D26。other_resume_idResumeother_user_idD30/code,31。Resume。created,Resume。modified,Resume。is_deleted,Resume。has_file,Resume。<代码>D41,<代码>D42。<代码>D43

来自streetofwallsusers AS User

左加入my_databaseattempts AS Attempt ON (Attempt.user_id = User.idAttempt.test_id != 5)左加入D56。D57 AS D58 ON (D59.D60=D61.D62)

my_databaseusers AS User1

LEFT JOIN my_database.tags_users AS TagUser on (User1.id= TagUser.user_id)

左连接my_database.tags AS Tag ON (TagUser.tag_id= Tag.id)

代码语言:javascript
复制
 AND `Resume`.`has_file` = 1      AND `Tag`.`id` = '8'  AND `Tag`.`id` != '3' GROUP BY `User`.`id`  ORDER BY `Attempt`.`score` DESC;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20248803

复制
相关文章

相似问题

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