Database SQL语句包含“IN”子句时的数据库索引

Database SQL语句包含“IN”子句时的数据库索引,database,indexing,db2,where-in,database-indexes,Database,Indexing,Db2,Where In,Database Indexes,我有一个SQL语句,它需要花费很多时间来执行,我真的必须以某种方式改进它 select * from table where ID=1 and GROUP in (select group from groupteam where department= 'marketing' ) 我的问题是,如果我应该在列ID和组上创建索引,它会有帮助吗? 或者如果不是,我应该在DEPARTMENT列的第二个表上创建索引吗? 或者我应该为两个表创建两个索引 第一个表有249003个。 第二个表总共有900

我有一个SQL语句,它需要花费很多时间来执行,我真的必须以某种方式改进它

select * from table where ID=1 and GROUP in
(select group from groupteam where 
department= 'marketing' )
我的问题是,如果我应该在列ID和组上创建索引,它会有帮助吗? 或者如果不是,我应该在DEPARTMENT列的第二个表上创建索引吗? 或者我应该为两个表创建两个索引

第一个表有249003个。 第二个表总共有900行,而该表中的查询只返回2行。 这就是为什么我对反应如此缓慢感到惊讶

谢谢

请尝试加入:

select * from table t
JOIN groupteam gt
ON d.group = gt.group
where ID=1 AND gt.department= 'marketing' 
表组和id列以及表组团队组列上的索引也会有所帮助。

您也可以使用EXISTS,具体取决于您的数据库,如:

select * from table t
where id = 1
and exists (
    select 1 from groupteam
    where   department = 'marketing'
        and group = t.group
)
在groupteam的部门和组的各个索引上创建复合索引 在表的id和组上创建复合索引或单个索引
根据您的数据库进行解释/分析,以查看数据库引擎如何使用索引。

对于一个数据库来说,要处理的记录并不多。一般来说,是的,索引会有所帮助。什么类型的数据库?是的,您需要ID和组的索引。或者先将记录选择到临时表中。从department='marketing'所在的groupteam中选择进入tmpGroups,然后将该诱惑加入selecthi all db2数据库中的表中used@Dejan下面的答案适合你的问题吗?@zedfoxus嗨,当我使用exist将查询更改为您的查询时,您认为如果我使用department和group列创建索引,我还可以获得更好的性能吗?谢谢,我同意,但我更喜欢和存在选择*。。。。根据我的观点,*的使用更具可读性。性能并没有更好这是一个神话,你分享了一个非常好的链接。谢谢你,@espernto57。