我有两张桌子
Table2有重复,并在列ID上编入索引。
我正在尝试执行以下查询
select
field1,
field2,
field3
from
table2
where
id in (select id from table2 where condition1='xx' and condition2='yy')
如果我在IN运算符条件中将id作为固定值放置
同样
select
field1,
field2,
field3
from
table2
where
id in ('id1','id2','id3','id4'......'idxx')
我收到错误/警告。
我想知道是否可以使用 IN 运算符来提高查询性能。
答案 0 :(得分:0)
假设您的第一个查询中有一个类型且其中一个IMyService
实际上应该是table2
,那么您可以使用table1
和相关的子查询。
EXISTS
如果给定子查询的至少一条记录存在,则 SELECT field1,
field2,
field3
FROM table2
WHERE EXISTS (SELECT *
FROM table1
WHERE table1.id = table2.id
AND condition1='xx'
AND condition2='yy');
为真。如您所见,记录必须与EXISTS
和condition1='xx'
以及condition2='yy'
中的id
相匹配。如果你想象一下,这样的行也会在你的子查询中使用table2
- 它会返回那个ID,等等,所以这样的记录必须在那里 - 反之亦然,你我会看到它等同于你的IN
声明。
如果没有我假设的错字,你根本不需要IN
。只需在主查询中提升条件即可。
IN
子查询结果中的ID是满足SELECT field1,
field2,
field3
FROM table2
WHERE condition1='xx'
AND condition2='yy';
和condition1='xx'
的行的ID。当您使用主查询中的条件时,您将获得这些行。因此,在两个查询中都有完全相同的ID集,这意味着您具有相同的结果集。
要进一步优化此功能,您可以创建索引以支持查询。但是为了给你提示,你必须至少提供实际的表结构,实际的查询和解释计划。