sql 语句查询效率的问题

2019-05-02 17:07:04 +08:00
 mart1nN

有两个表,score (成绩)和 student (学生),需求是查询学生李四的所有科目的成绩

select score.c_name, score.grade from score,student where student.name = '李四' and score.stu_id = student.id

select c_name, grade from score where stu_id= (select id from student where name='李四')

这两句的查询结果是一样的,请问查询效率哪一条会高一点呢?有关 sql 效率这方面的东西有什么推荐的书 /博客吗?

4319 次点击
所在节点    MySQL
6 条回复
8FollowHeart
2019-05-02 17:20:55 +08:00
1.加上索引 name 和 stu_id 后第一条快
8FollowHeart
2019-05-02 17:21:52 +08:00
第二种建议少用,student 数据少,性能一般
winoros
2019-05-02 18:30:14 +08:00
这两个 SQL 一个是 inner join 一个是 semi join。
semi join 因为不能让外表的数据膨胀 所以总是只能拿外表查内表。而 inner join 则既可以拿左表查右表 也可以拿右表查左表。这个 case 的实际意义来看,右表(内表)肯定是小的一边。所以 semi join 会不占优势。
当然优化器实际是可以让两个 SQL 优化成同样的执行计划,但是 MySQL 可能没有做?具体的就要看文档了
chitanda
2019-05-02 18:38:37 +08:00
请善用 explain
JaguarJack
2019-05-02 20:51:53 +08:00
explain 之后再来问
mmdsun
2019-05-03 02:07:42 +08:00
想问连表和子查询哪个更快?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560551

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX