不想做厨师的程序员不是好农民 2016-03-04 09:54 采纳率: 0%
浏览 1726

PostGresql SQL性能优化求助

点表:
create table point_p(flong float8,flat float8,userid int4);
insert into point_p(flong,flat,userid) values (113.126559,22.655367,1);
insert into point_p(flong,flat,userid) values (113.029345,22.621959,2);
insert into point_p(flong,flat,userid) values (113.08471,22.600182,3);
select * from point_p;

图片说明

面表:

create table vcpolgon_p(polygon varchar,intgrdid int4);
insert into vcpolgon_p(polygon,intgrdid) values ('113.074273 22.593893,113.074191 22.593944,113.074272 22.594058,113.074356 22.59401',1);
insert into vcpolgon_p(polygon,intgrdid) values ('113.068717 22.591276,113.068634 22.591406,113.069309 22.591791,113.069396 22.591655',2);
insert into vcpolgon_p(polygon,intgrdid) values ('113.068475 22.58995,113.068115 22.590271,113.068185 22.590336,113.068544 22.590017',3);
select * from vcpolgon_p;
图片说明

我现在需要一个这样的表

图片说明

我自己写了一个判断面是否包含点的方法,函数usp_polygon_contains_point_1('flong flat ',polygon );

这个函数,传入点多经纬度,和面的信息,如果这个main包含了传入的点则返回1,不包含就返回0,经测试是可行的。

现在要利用这个函数,把点表的数据对应到面表的intgridid,如果点表的点存于于面表的某一个面里面则把面表的intgridid 回填到点表里面去。

结果如下图:

图片说明

我自己写了一个

select

 t1.*,

t2.intgridid 

from point_p t1,

vcpolgon_p t2 

where usp_polygon_contains_point_1(t1.flong||' '||t1.flat,t2.polygon)=1;

这样只是把有对应面的找出来,没有对应面的并没有回填空,而且这样写超级慢,点表10W条数据,

面表5000条数据,要花几个小时

求大神解救

  • 写回答

3条回答

  • threenewbee 2016-03-06 00:17
    关注

    where usp_polygon_contains_point_1(t1.flong||' '||t1.flat,t2.polygon)=1;
    字符串的匹配是非常慢的,最好先建立临时字段,把关键字缓存起来

    评论

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计