题解 | #浙江大学用户题目回答情况#
浙江大学用户题目回答情况
https://www.nowcoder.com/practice/55f3d94c3f4d47b69833b335867c06c1
select
t1.device_id,
qpd.question_id,
qpd.result
from (
select
up.device_id
from user_profile up
where up.university = "浙江大学"
) as t1
left join question_practice_detail qpd on t1.device_id = qpd.device_id
order by qpd.question_id asc
因为涉及到SQL优化的问题, 所以具体列出来
方法一: 先用user_profile连接question_practice_detail然后再where进行过滤, 最后排序即可
1 2 3 4 5 6 7 8 |
|
方法二: 先用where对表一进行过滤, 然后在连接question_practice_detail进行查询
1 2 3 4 5 6 7 8 9 10 11 |
|
两种方法在执行层面上, 方法一先join, 在过滤查询, 当表一数据量大时, 查询效率会很慢;
方法二先降低表1的数据量, 再进行关联, 效率提升较大
但是注意: mysql自带的优化器会对方法一进行优化, 哪怕是按方法一提交的代码, 优化器也会先对表1过滤再关联查询.
记录练习过程
