Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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
Database PostgreSQL中的解释分析_Database_Postgresql_Sql Execution Plan - Fatal编程技术网

Database PostgreSQL中的解释分析

Database PostgreSQL中的解释分析,database,postgresql,sql-execution-plan,Database,Postgresql,Sql Execution Plan,如果我正在PostgreSQL上运行以下查询: select * from osm_pois_v06 pp where pp.geom && ST_MakeEnvelope(8.174,48.298,12.431,50.930,4326); 我得等1,34分钟 但是,如果我正在使用上述查询执行一个执行计划(解释分析),那么我有以下输出: 计划告诉我执行时间是2624秒。但是为什么少于1,34分钟呢?因为您正在使用pgAdmin获取超过600000行的结果集 众所周知,pgAd

如果我正在PostgreSQL上运行以下查询:

select *
from osm_pois_v06 pp
where pp.geom && ST_MakeEnvelope(8.174,48.298,12.431,50.930,4326);
我得等1,34分钟

但是,如果我正在使用上述查询执行一个执行计划(解释分析),那么我有以下输出:


计划告诉我执行时间是
2624
秒。但是为什么少于1,34分钟呢?

因为您正在使用pgAdmin获取超过600000行的结果集


众所周知,pgAdmin在显示大型结果集时速度较慢。最好使用
psql

评估客户端软件和/或网络连接速度慢对查询执行的影响的最简单方法是在选择之前添加“create temp table as”。如果在4秒钟内运行,并且1:34没有“创建临时”部分,那么可以肯定的是,瓶颈在于将结果集从数据库中传输出来并在接收端进行处理。

explain(analyze)
没有给出估计。它报告服务器上的实时执行时间,而不向客户端传输任何数据-抱歉-不知道,这是Postgres特有的事情吗?。我已经删除了关于估算的最后一条注释,并留下了关于create temp的第一部分,这在大多数(如果不是全部)db platformsWell上都很有用,创建temp表会增加运行时的额外开销(因为需要写入数据)。这是没有必要的,因为
explain(analyze)
将为您提供一个更准确的信息,说明在100%的Postgres上下文中检索数据需要多长时间。我相信您是对的。我们所有其他人都必须用一个开销换另一个(小得多)的开销,然后从那里做一个大胆的猜测……好吧,问题是关于博士后的。其他数据库管理系统也提供类似的功能(例如,带有
set autotrace
选项的Oracle)