SQL查询到这么多的时间,需要优化
SELECT LM.user_id,LM.users_lineup_id, min(LM.total_score) AS total_score
FROM vi_lineup_master LM JOIN
vi_contest AS C
ON C.contest_unique_id = LM.contest_unique_id join
(SELECT min(total_score) as total_score
FROM vi_lineup_master
GROUP BY group_unique_id
) as preq
ON LM.total_score = preq.total_score
WHERE LM.contest_unique_id = 'iledhSBDO' AND
C.league_contest_type = 1
GROUP BY group_unique_id
以上查询是要找到每个组的比赛中,查询返回正确的结果,但它不是大data.Needed优化响应请您分享您的解决方案的失败者。提前致谢。SQL查询到这么多的时间,需要优化
您可以尝试将您的JOIN
s移动到子查询。此外,您应该注意外部查询上的“错误”GROUP BY
用法。在Mysql中,您可以按某些列进行分组,并且可以在没有任何聚合函数的情况下选择未在group子句中指定的其他列,但数据库无法确保将返回给您的数据。为了保持应用程序的一致性,将它们包装在一个聚合函数中。
检查这一项帮助:
SELECT
MIN(LM.user_id) AS user_id,
MIN(LM.users_lineup_id) AS users_lineup_id,
MIN(LM.total_score) AS total_score
FROM vi_lineup_master LM
WHERE 1=1
-- check if this "contest_unique_id" is equals
-- to 'iledhSBDO' for a "league_contest_type" valued 1
AND LM.contest_unique_id IN
(
SELECT C.contest_unique_id
FROM vi_contest AS C
WHERE 1=1
AND C.contest_unique_id = 'iledhSBDO'
AND C.league_contest_type = 1
)
-- check if this "total_score" is one of the
-- "min(total_score)" from each "group_unique_id"
AND LM.total_score IN
(
SELECT MIN(total_score)
FROM vi_lineup_master
GROUP BY group_unique_id
)
GROUP BY LM.group_unique_id
;
而且,这个查询的一些作品看起来是多余的,但它是因为我不想改变你写的过滤器,刚搬到他们。
此外,您的查询逻辑似乎有点怪我的基础上,表/列名,你怎么写的......请查一下我的查询这反映了什么,我理解你的实施意见。
希望它有帮助。
是的,它做了这份工作,并与超过1个lac唱片一起工作........................非常感谢Felypp :) Thankyou所有的建议(y) – user3296832
@ user3296832不客气。不要忘记接受任何答案作为正确的答案。 –
运行'explain'并发布查询计划 – Rahul
您是否在连接列上设置了索引? –
添加** contest_unique_id =“iledhSBDO” **进入内部子查询** ** PREQ并 – StanislavL