Mar*_*mon 2 postgresql indexing
我有一个大约有 2 亿行的表。在那张桌子上,我有一个标志deprecated(布尔值)和一个date_time(时间戳)。
我的表中充满了已弃用的值。目前,我有 2 亿的 3 个值尚未弃用。
所以我尝试在已弃用的标志上添加部分索引,但 postgres 没有考虑它并继续进行 Seq 扫描。
以下是索引的创建方式:
CREATE INDEX api_kpi_date_time_idx ON public.api_kpi USING btree (date_time) WHERE (deprecated = false)
Run Code Online (Sandbox Code Playgroud)
我尝试运行解释:
explain select ak.id from api_kpi ak
where ak.deprecated is false and date_time < now()
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
Seq Scan on api_kpi ak (cost=0.00..10208288.72 rows=80594624 width=37)
Filter: ((deprecated IS FALSE) AND (date_time < now()))
Run Code Online (Sandbox Code Playgroud)
查询运行大约需要 5 分钟。
我需要做什么才能确保 Postgres 考虑索引并且仅对索引中的子集进行日期比较?