Sql postGIS非常慢的st_缓冲区查询-如何提高性能

Sql postGIS非常慢的st_缓冲区查询-如何提高性能,sql,performance,postgresql,postgis,spatial,Sql,Performance,Postgresql,Postgis,Spatial,我正在postgreSQL空间数据库中使用postGIS。我想从48只动物的移动路径周围的缓冲区中创建homerange多边形(GPS位置用一条线连接)。我有48种不同动物的264000个数据点的位置数据。 我分3个步骤来提高性能。问题是第二步(st_buffer在路径周围创建缓冲区)。如果我为一只动物(6000个位置)运行下面的步骤2,大约需要3分钟。如果我为所有动物的数据子集(三分之一)运行第二步,则需要30分钟。 现在,我正在为所有数据运行查询,它已经运行了5个多小时,我不确定它是否会成功

我正在postgreSQL空间数据库中使用postGIS。我想从48只动物的移动路径周围的缓冲区中创建homerange多边形(GPS位置用一条线连接)。我有48种不同动物的264000个数据点的位置数据。 我分3个步骤来提高性能。问题是第二步(st_buffer在路径周围创建缓冲区)。如果我为一只动物(6000个位置)运行下面的步骤2,大约需要3分钟。如果我为所有动物的数据子集(三分之一)运行第二步,则需要30分钟。 现在,我正在为所有数据运行查询,它已经运行了5个多小时,我不确定它是否会成功返回。是否有任何理由说明运行时间不会以线性方式或多或少地增长?有谁能告诉我我的代码是否有问题,或者是否有人可以改进我的代码的性能。任何建议都将不胜感激

步骤1:首先创建一个带有移动路径的临时表-使用st_simplify简化float参数为10m的路径

create table ws_zurich.polygon_homerange_104m_mirco_all_step1 as
select gps.animals_original_id, st_simplify(st_makeline(gps.geom_21781),10) as geom
from (select animals_original_id,acquisition_time, geom_21781
from ws_zurich.mirco
order by animals_original_id, acquisition_time) as gps
group by gps.animals_original_id;

Alter table ws_zurich.polygon_homerange_104m_mirco_all_step1
ADD CONSTRAINT polygon_homerange_104m_mirco_step1_pkey PRIMARY KEY(animals_original_id);
步骤2:在移动路径周围创建一个带有缓冲区的表-这是最慢的查询,整个数据集需要几个小时

create table ws_zurich.polygon_homerange_104m_mirco_all_step2 as
select animals_original_id, (st_buffer(geom, 104)) as geom
from ws_zurich.polygon_homerange_104m_mirco_all_step1;
--步骤3:使用st_union创建单个多边形作为主范围

create table ws_zurich.polygon_homerange_104m_mirco_post_hunting as
select row_number() over (order by animals_original_id) as id,animals_original_id,(st_union(geom)) as geom
from ws_zurich.polygon_homerange_104m_mirco_post_hunting_step2 group by animals_original_id;

Alter table ws_zurich.polygon_homerange_104m_mirco_post_hunting
ADD CONSTRAINT polygon_homerange_104m_mirco_post_hunting_pkey PRIMARY KEY (id);

您能否向我们展示EXPLAIN和/或EXPLAIN ANALYZE的结果?您是否调整了PostgreSQL安装以获得更好的性能?如果不是这样,@Mike T-谢谢你的链接,db是在一个外部服务器上的,应该在我看来是正确的know@FrankHeikens-这是步骤2的解释-“多边形上的顺序扫描\u homerange\u 104m\u mirco\u all\u step1(成本=0.00..13.48行=48宽度=64)”-我从未使用过解释,也不知道如何解释输出。你确定吗?一个只有48行的表几乎是空的,这永远不会花费5个小时来阅读。除非该表已锁定,并且您正在等待其他进程解锁该表。。。还可能是统计数据不是最新的,您必须运行ANALYZE;