Database PostgreSQL中的解释分析
如果我正在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
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)