资讯动态

SQL 高性能查询:学过 001 至少一门课的同学

发布时间:2026/9/8 19:33:55 来源:尧图企业网站定制
最优、最高性能的写法同时解释原理保证在大数据量下也跑得飞快。最终高性能 SQL推荐sqlSELECT DISTINCT s.sno, s.sname FROM student s JOIN sc sc1 ON s.sno sc1.sno -- 匹配 001 同学学过的所有课程 WHERE sc1.cno IN (SELECT cno FROM sc WHERE sno 001) -- 排除自己 AND s.sno ! 001;极致性能版无 DISTINCT效率更高sqlSELECT s.sno, s.sname FROM student s WHERE EXISTS ( SELECT 1 FROM sc sc1 JOIN sc sc2 ON sc1.cno sc2.cno WHERE sc1.sno s.sno AND sc2.sno 001 AND s.sno ! 001 );性能说明为什么这是高性能写法1.EXISTS 是数据库最优方案EXISTS只需要找到一条匹配就停止查询不做全表扫描不产生重复数据不需要 DISTINCT去重非常耗性能数据库优化器对EXISTS支持最好2. 索引建议必须加性能爆炸提升给这两个字段加索引百万数据也毫秒出结果sql-- 选课表索引 CREATE INDEX idx_sc_sno_cno ON sc(sno, cno); -- 学生表索引 CREATE INDEX idx_student_sno ON student(sno);表结构说明默认标准表student(sno, sname)学生表sc(sno, cno)选课表course(cno, cname)课程表本查询不需要业务含义查询结果 除了 001 自己以外所有学过 001 同学任意一门课程的学生。总结首选 EXISTS 版本性能最高、无冗余、无去重开销必须加索引这是高性能的核心逻辑简单、数据库执行成本最低

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价