题解 | #浙江大学用户题目回答情况#

https://www.nowcoder.com/practice/55f3d94c3f4d47b69833b335867c06c1

因为涉及到SQL优化的问题, 所以具体列出来
方法一: 先用user_profile连接question_practice_detail然后再where进行过滤, 最后排序即可
select 
    up.device_id,
    qpd.question_id,
    qpd.result
from user_profile up
left join question_practice_detail qpd on up.device_id=qpd.device_id
where university='浙江大学'
order by qpd.question_id asc
方法二: 先用where对表一进行过滤, 然后在连接question_practice_detail进行查询
select t1.device_id,
    qpd.question_id,
    qpd.result
from (
    select 
    up.device_id
    from user_profile up
    where up.university='浙江大学'
) t1
left join question_practice_detail qpd on t1.device_id=qpd.device_id
order by qpd.question_id asc
两种方法在执行层面上, 方法一先join, 在过滤查询, 当表一数据量大时, 查询效率会很慢;
方法二先降低表1的数据量, 再进行关联, 效率提升较大
但是注意: mysql自带的优化器会对方法一进行优化, 哪怕是按方法一提交的代码, 优化器也会先对表1过滤再关联查询. 


全部评论
select a.device_id,a.question_id,a.result from question_practice_detail a left join user_profile b on a.device_id = b.device_id and b.university ='浙江大学'; 请问一下我写的这个有什么问题呢,我感觉没错,但是运行了就是不对
点赞 回复 分享
发布于 2023-05-24 09:47 四川

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
希望奇迹发生的布莱克...:真的是 现在卷实习就是没苦硬吃
点赞 评论 收藏
分享
06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
06-11 17:39
门头沟学院 Java
小呆呆的大鼻涕:卧槽,用户彻底怒了
点赞 评论 收藏
分享
评论
8
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务