Postgresql Postgres部分索引未计入帐户
我有一张大约2亿行的桌子。在那张表上,我有一个不推荐使用的布尔标志和一个日期时间戳 我的表中充满了不推荐使用的值。目前,我在2亿美元中有3个值没有被否决 所以我尝试在弃用标志上添加一个部分索引,但postgres并没有考虑到这一点,而是继续进行Seq扫描 以下是创建索引的方式:Postgresql Postgres部分索引未计入帐户,postgresql,indexing,Postgresql,Indexing,我有一张大约2亿行的桌子。在那张表上,我有一个不推荐使用的布尔标志和一个日期时间戳 我的表中充满了不推荐使用的值。目前,我在2亿美元中有3个值没有被否决 所以我尝试在弃用标志上添加一个部分索引,但postgres并没有考虑到这一点,而是继续进行Seq扫描 以下是创建索引的方式: CREATE INDEX api_kpi_date_time_idx ON public.api_kpi USING btree (date_time) WHERE (deprecated = false) 我试着解释
CREATE INDEX api_kpi_date_time_idx ON public.api_kpi USING btree (date_time) WHERE (deprecated = false)
我试着解释一下:
explain select ak.id from api_kpi ak
where ak.deprecated is false and date_time < now()
我得到以下信息:
Seq Scan on api_kpi ak (cost=0.00..10208288.72 rows=80594624 width=37)
Filter: ((deprecated IS FALSE) AND (date_time < now()))
查询运行几乎需要5分钟
我需要做什么才能确保Postgres考虑到索引,并且只对索引中的子集进行日期比较?在处理查询后发现错误
不推荐为假!=不推荐=错误。创建部分索引时,查询必须完全相同,Postgres才能获取它。不推荐使用的列可以为空吗?添加索引后是否运行了分析?发现问题。。。。。不推荐为FALSE时,索引不会拾取该值。但deprecated=FALSE是。谢谢你的帮助!美好的谢谢你的回复+1.