Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么仅索引扫描需要这么长时间?_Sql_Database_Postgresql_Postgresql 9.3 - Fatal编程技术网

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);