Exist 和 In 的区别,哪个效率高?

CREATE TABLE students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(50)
);

CREATE TABLE courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(50),
    student_id INT,
    FOREIGN KEY (student_id) REFERENCES students(student_id)
);

-- 插入示例数据
INSERT INTO students (student_id, student_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');

INSERT INTO courses (course_id, course_name, student_id) VALUES
(101, 'Math', 1),
(102, 'Physics', 1),
(103, 'Chemistry', 2);

-- 使用 IN 关键字的例子
SELECT s.*
FROM students s
WHERE s.student_id IN (SELECT c.student_id FROM courses c);

-- 使用 EXISTS 关键字的例子
SELECT s.*
FROM students s
WHERE EXISTS (SELECT 1 FROM courses c WHERE c.student_id = s.student_id);

        两个查询的目的都是找出参加了课程的学生。然而,从效率角度来讲,如果没有合适索引,两个查询在大规模数据下可能表现会有差异。但实际上,对于这么简单的关联查询,现代数据库的优化器通常都能很好地优化这两种查询方式的执行计划,难以直观看出效率上的明显差距。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值