如何在SQL查询内部执行IN表达式?

时间:2015-03-12 12:20:02

标签: sql postgresql sql-in

我查询了IN子句。

select * from student where id in (1, 2, 3, 4, 5)

引擎如何解析并执行此SQL查询? 是这样的,在五个不同的查询中解析或其他什么?

select * from student where id = 1
select * from student where id = 2
select * from student where id = 3
select * from student where id = 4
select * from student where id = 5

2 个答案:

答案 0 :(得分:3)

不,它不会这样做虽然五个查询和一个查询将返回相同的结果(假设在运行五个查询时没有对表进行修改)。这五个查询需要扫描student表五次,每次查询一次。 “扫描”实际上可能使用索引非常快。

还需要编译和执行五个查询,这会增加额外的开销。

使用in,您正在执行一个查询。如果没有索引,Postgres将查看每一行以查看它是否匹配。如果是这样,它将进入结果集。使用索引,它只会查找索引中的相应行。

答案 1 :(得分:3)

Postgres查询规划器会翻译IN with a list (row) expression

select * from student where id in (1, 2, 3, 4, 5);

完全是这样的:

select * from student where id = 1 OR id = 2 OR id = 3 OR id = 4 OR id = 5;

如果您使用EXPLAIN运行语句,则可以看到此内容。

请注意IN有两种基本形式。关于dba.SE的相关答案的详细信息: