SDE ST_Geometry SQL st_intersects查询很慢的解决方法
环境:服务端 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查询很慢的解决方法相关推荐
- 打开我的计算机页面很卡,xp系统打开我的电脑很卡的解决方法
最近有用户来给小编咨询说他的xp系统打开我的电脑很卡,双击后要等很久才能打开,对于这个问题,小编就给大伙儿说说xp系统打开我的电脑很卡的解决方法. 解决方案以下: 1.点一下[开始]-->[运行 ...
- (DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法
(DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法 参考文章: (1)(DNS被劫持所导致的)QQ音乐与视频网页打开很慢的解决方法 (2)https://www.cnblogs.com/ka ...
- MySQL查询出错提示 --secure-file-priv解决方法
MySQL查询出错提示 --secure-file-priv解决方法 参考文章: (1)MySQL查询出错提示 --secure-file-priv解决方法 (2)https://www.cnblog ...
- mysql5.6启动占用内存很大的解决方法
mysql5.6启动占用内存很大的解决方法 参考文章: (1)mysql5.6启动占用内存很大的解决方法 (2)https://www.cnblogs.com/musings/p/5913225.ht ...
- SQL Server 2008 允许远程链接 解决方法
用户在使用SQL Server 2008远程链接时,可能会弹出如下对话框: 在链接SQL服务器时发生网络链接错误或特定实例错误.SQL服务器不存在或者链接不成功.请验证用户名是否正确或SQL服务器是否 ...
- appiumsend_keys很慢的解决方法
appiumsend_keys很慢的解决方法 参考文章: (1)appiumsend_keys很慢的解决方法 (2)https://www.cnblogs.com/344525813xiang/p/6 ...
- JDBC的批量查询报告内存溢出解决方法
JDBC的批量查询报告内存溢出解决方法 参考文章: (1)JDBC的批量查询报告内存溢出解决方法 (2)https://www.cnblogs.com/DreamDrive/p/5761227.htm ...
- sql server 对象名无效的解决方法
sql server 对象名无效的解决方法 参考文章: (1)sql server 对象名无效的解决方法 (2)https://www.cnblogs.com/meetcomet/p/3477937. ...
- 计算机重启很慢,教您win7电脑关机很慢的解决方法
电脑在我们生活中出现的次数堪比我们每天吃的一日三餐,每天都离不开要使用它的时候.那么,今天小编就来跟你们说一个问题,那就是当遇到电脑关机速度很慢的时候,我们要怎么解决.今天小编我就告诉你win7电脑开 ...
最新文章
- lintcode: k Sum 解题报告
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 六 )
- jozj3419-最大利润【树形dp】
- spring mvc是什么_狂神说SpringMVC01:什么是SpringMVC
- mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap...
- linux 修改消息队列大小
- Linux学习十七、正规表达式练习题
- 联想Z6 Pro 5G探索版官宣 常程:有5G才最6
- linux minimal版没有ip信息,如何配置linux网络信息,访问外网
- 浙江大学-英特尔嵌入式技术中心成立
- 【项目篇- 封面后目录前的核心内容、优势展示部分如何打磨?(超全图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书
- python的metaclass分析
- 你所想要了解的美国人工智能专业
- 【Centos】查询命令
- 永洪科技怎么样_「永洪科技」
- 手机端怎么把PDF格式文件转换成图片
- select 检索数据
- 广电为什么禁止投屏_广电的机顶盒怎么投屏
- Pomelo Gate
- 拓嘉启远电商:拼多多直通车烧钱太多的原因
热门文章
- java求二阶微积分方程特解_Scipy:实现微分方程的两种方法:两种不同的解决方案:回答...
- 票务系统开发_景区票务系统部署到底是SaaS还是本地化呢?
- 14010.xilinx-EMIO扩展SPI设备
- 数字图像处理(三)——频域滤波
- Nginx 源码编译
- 从程序员到项目经理(十):程序员加油站 --要执着但不要固执
- java的标识符可以以数字开头_标识符可以以数字开头,但不能是Java中的关键字...
- centos7开放端口访问不了_CentOS7搭建GateOne,实现WebSSH
- 《深入理解分布式事务》第五章 强一致性分布式解决方案
- 《Reids 设计与实现》第十六章 集群(下)