现有两表a,b,其中a表的a1字段建立了索引,数据量千万级别,假设in子句查询的结果等同于第二条sql中in的值,或者说in子句查询的数据量小于10个,以下sql的执行计划发现a1字段的索引查询未生效,是什么原因? select * from a where a.a1 in (select b.b1 from b);
执行select * from a where a.a1 in ('1','2','3');索引是生效的!
当in里面的数据量很大的时候,就不会走索引,用Exists 子表代替 in
好吧,还有个条件没说清楚,in子句中的数据量10以下
你可以指定索引的。。 select * from a FORCE INDEX(索引名称) where a.a1 in (select b.b1 from b);
索引名称
postgresql里面不支持这种强制索引的用法