环境:服务端 SDE 10.0 oracle 11.2,客户端 PLSQL 11,oracle 11.2

为了调试方便,以下测试都是把sql提取出来在PLSQL上做


需求是已知一个多边形的点坐标,要在一个线图层里,做关系为intersect的空间查询,原来的sql是这样

select LNOfrom HSLINE twhere sde.st_intersects(t.shape,sde.st_geometry(‘polygon ((536001.227128728 3646345.3998618745,535967.7465966925 3646245.5819230564,536081.5112751485 3646231.6260272274,536096.174854475 3646337.021285943,536096.174854475 3646337.021285943,536001.227128728 3646345.3998618745))‘,t.shape.srid)) = 1

可是查询很慢,要几分钟,图层数据量才几万,理论上不应该这么慢

后来发现是构建几何对象(st_geometry)造成的,如果把st_geometry放在一个select里,查询速度就正常了

select LNOfrom HSLINE twhere sde.st_intersects(t.shape,(select sde.st_geometry(‘polygon ((536001.227128728 3646345.3998618745,535967.7465966925 3646245.5819230564,536081.5112751485 3646231.6260272274,536096.174854475 3646337.021285943,536096.174854475 3646337.021285943,536001.227128728 3646345.3998618745))‘,t.shape.srid)from HSLINE where rownum=1)) = 1

然而这样还有个缺陷,万一表HSLINE一行都没有就会出错,后来同事出了注意,最后做成完美版本

select LNOfrom HSLINE twhere sde.st_intersects(t.shape,(select sde.st_geometry(‘polygon ((536001.227128728 3646345.3998618745,535967.7465966925 3646245.5819230564,536081.5112751485 3646231.6260272274,536096.174854475 3646337.021285943,536096.174854475 3646337.021285943,536001.227128728 3646345.3998618745))‘,t.shape.srid)from dual)) = 1

dual的解释http://www.cnblogs.com/qiangqiang/archive/2010/10/15/1852229.html

最后,这个慢的原因,我觉得是可能每一行做where判断时,都会执行一次st_geometry生成几何对象,如果把它放在一个子select里,数据库就会只做一次子select查询,然后把结果存起来,主表where判断时直接用这个对象

转载于:https://www.cnblogs.com/telwanggs/p/4933508.html

SDE ST_Geometry SQL st_intersects查询很慢的解决方法相关推荐

  1. 打开我的计算机页面很卡,xp系统打开我的电脑很卡的解决方法

    最近有用户来给小编咨询说他的xp系统打开我的电脑很卡,双击后要等很久才能打开,对于这个问题,小编就给大伙儿说说xp系统打开我的电脑很卡的解决方法. 解决方案以下: 1.点一下[开始]-->[运行 ...

  2. (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法

    (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法 参考文章: (1)(DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法 (2)https://www.cnblogs.com/ka ...

  3. MySQL查询出错提示 --secure-file-priv解决方法

    MySQL查询出错提示 --secure-file-priv解决方法 参考文章: (1)MySQL查询出错提示 --secure-file-priv解决方法 (2)https://www.cnblog ...

  4. mysql5.6启动占用内存很大的解决方法

    mysql5.6启动占用内存很大的解决方法 参考文章: (1)mysql5.6启动占用内存很大的解决方法 (2)https://www.cnblogs.com/musings/p/5913225.ht ...

  5. SQL Server 2008 允许远程链接 解决方法

    用户在使用SQL Server 2008远程链接时,可能会弹出如下对话框: 在链接SQL服务器时发生网络链接错误或特定实例错误.SQL服务器不存在或者链接不成功.请验证用户名是否正确或SQL服务器是否 ...

  6. appiumsend_keys很慢的解决方法

    appiumsend_keys很慢的解决方法 参考文章: (1)appiumsend_keys很慢的解决方法 (2)https://www.cnblogs.com/344525813xiang/p/6 ...

  7. JDBC的批量查询报告内存溢出解决方法

    JDBC的批量查询报告内存溢出解决方法 参考文章: (1)JDBC的批量查询报告内存溢出解决方法 (2)https://www.cnblogs.com/DreamDrive/p/5761227.htm ...

  8. sql server 对象名无效的解决方法

    sql server 对象名无效的解决方法 参考文章: (1)sql server 对象名无效的解决方法 (2)https://www.cnblogs.com/meetcomet/p/3477937. ...

  9. 计算机重启很慢,教您win7电脑关机很慢的解决方法

    电脑在我们生活中出现的次数堪比我们每天吃的一日三餐,每天都离不开要使用它的时候.那么,今天小编就来跟你们说一个问题,那就是当遇到电脑关机速度很慢的时候,我们要怎么解决.今天小编我就告诉你win7电脑开 ...

最新文章

  1. lintcode: k Sum 解题报告
  2. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 六 )
  3. jozj3419-最大利润【树形dp】
  4. spring mvc是什么_狂神说SpringMVC01:什么是SpringMVC
  5. mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap...
  6. linux 修改消息队列大小
  7. Linux学习十七、正规表达式练习题
  8. 联想Z6 Pro 5G探索版官宣 常程:有5G才最6
  9. linux minimal版没有ip信息,如何配置linux网络信息,访问外网
  10. 浙江大学-英特尔嵌入式技术中心成立
  11. 【项目篇- 封面后目录前的核心内容、优势展示部分如何打磨?(超全图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书
  12. python的metaclass分析
  13. 你所想要了解的美国人工智能专业
  14. 【Centos】查询命令
  15. 永洪科技怎么样_「永洪科技」
  16. 手机端怎么把PDF格式文件转换成图片
  17. select 检索数据
  18. 广电为什么禁止投屏_广电的机顶盒怎么投屏
  19. Pomelo Gate
  20. 拓嘉启远电商:拼多多直通车烧钱太多的原因

热门文章

  1. java求二阶微积分方程特解_Scipy:实现微分方程的两种方法:两种不同的解决方案:回答...
  2. 票务系统开发_景区票务系统部署到底是SaaS还是本地化呢?
  3. 14010.xilinx-EMIO扩展SPI设备
  4. 数字图像处理(三)——频域滤波
  5. Nginx 源码编译
  6. 从程序员到项目经理(十):程序员加油站 --要执着但不要固执
  7. java的标识符可以以数字开头_标识符可以以数字开头,但不能是Java中的关键字...
  8. centos7开放端口访问不了_CentOS7搭建GateOne,实现WebSSH
  9. 《深入理解分布式事务》第五章 强一致性分布式解决方案
  10. 《Reids 设计与实现》第十六章 集群(下)