我有以下查询需要很长时间才能执行。我需要加快速度,但是我不知道要使用什么技术。这是查询:
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;
此查询生成以下说明:
如您所见,我在此查询中有几个索引。目前只有简历表无法编入索引。是否可以在此查询的上下文中索引此表?有没有其他方法来加快这个我没想过的查询?它的预期功能令人望而却步,而且我没有想法。感谢任何能提供帮助的人。如果需要任何其他信息,请告诉我。
答案 0 :(得分:1)
尝试内部联接而不是子查询 它默认指导查询而不运行数据,但可能跟随查询将帮助您。
选择User
。id
,User
。username
,User
。password
,User
。{{1} },role
。User
,created
。User
,modified
。User
,email
。User
, other_user_id
。User
,first_name
。User
,last_name
。User
,place_id
。Resume
,{{ 1}}。id
,Resume
。user_id
,Resume
。other_resume_id
,Resume
。other_user_id
,{{1} }。Resume
,file_extension
。Resume
,created
。Resume
,modified
。Resume
,is_deleted
。 Resume
,has_file
。Resume
这
is_stamped
。Resume
AS is_active
LEFT JOIN streetofwalls
。users
AS User
ON(my_database
。attempts
= Attempt
。Attempt
和user_id
。User
!= 5)
LEFT JOIN id
。Attempt
AS test_id
ON(my_database
。reports
= Resume
。Resume
)
,user_id
。User
AS User1
LEFT JOIN id
。my_database
AS TagUser on {users
。my_database
= tags_users
。User1
)
LEFT JOIN id
。TagUser
AS代码开启(user_id
。my_database
= tags
。TagUser
)
WHERE
tag_id
。Tag
= id
。User
和id
。User1
= 8
和id
。Attempt
> 60个
和test_id
。Attempt
= 1
和score
。Resume
='8'和has_file
。Tag
!='3'
GROUP BY id
。Tag
ORDER BY id
。User
DESC;