首页 新闻 赞助 找找看

pgsql索引失效问题!

0
悬赏园豆:10 [待解决问题]

现有两表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');索引是生效的!

梦与花落的主页 梦与花落 | 初学一级 | 园豆:86
提问于:2021-09-08 10:28
< >
分享
所有回答(2)
0

当in里面的数据量很大的时候,就不会走索引,用Exists 子表代替 in

不知道风往哪儿吹 | 园豆:2035 (老鸟四级) | 2021-09-08 10:55

好吧,还有个条件没说清楚,in子句中的数据量10以下

支持(0) 反对(0) 梦与花落 | 园豆:86 (初学一级) | 2021-09-08 10:56
0

你可以指定索引的。。
select * from a FORCE INDEX(索引名称) where a.a1 in (select b.b1 from b);

为乐而来 | 园豆:1432 (小虾三级) | 2021-09-08 13:04

postgresql里面不支持这种强制索引的用法

支持(0) 反对(0) 梦与花落 | 园豆:86 (初学一级) | 2021-09-09 09:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册