Sql 为什么仅索引扫描需要这么长时间?
为什么执行我的简单查询Sql 为什么仅索引扫描需要这么长时间?,sql,database,postgresql,postgresql-9.3,Sql,Database,Postgresql,Postgresql 9.3,为什么执行我的简单查询 select count(this_.Id) as y0_ from Activity this_ 花这么长时间(这次超过10分钟) 以下是查询计划(解释分析的输出): 和PostgreSql版本: PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 64-bit 索引也在此处,位于Id字段上: ALTER TABLE public.activity
select count(this_.Id) as y0_ from Activity this_
花这么长时间(这次超过10分钟)
以下是查询计划(解释分析的输出):
和PostgreSql版本:
PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 64-bit
索引也在此处,位于Id字段上:
ALTER TABLE public.activity
ADD CONSTRAINT activity_pkey
PRIMARY KEY (id);
PostgreSQL中的仅索引扫描有时必须查看表(堆),因为索引页不包含有关元组可见性的信息。 这是从索引中提取的行数: (实际……行数=19517989) 这就是堆中重新检查的行数: 堆获取:10351403 为了加快速度,您应该在桌子上运行真空:
vacuum活动
真空将更新,之后,仅索引扫描将能够使用(几乎)仅索引页执行。我已完成真空(详细,分析)在活动表上。在此之后,同一个SELECT命令的输出如下所示:即使是现在,重新检查的行数也是巨大的。但实际上,它的执行速度快了三倍。您认为将来会有任何改进吗?如果您需要精确计数,我看不到任何改进。但是如果估计对您来说足够,请阅读以下内容:It用于分页(Tapestry中的网格组件),所以它应该是精确的值。也许我会通过只查询上个月内的活动来缩小所需活动的范围。
ALTER TABLE public.activity
ADD CONSTRAINT activity_pkey
PRIMARY KEY (id);