龙空技术网

关于Oracle Spacial查询慢的情况分析

Yinawake 147

前言:

而今姐妹们对“oracle查询结果只显示10条”可能比较着重,小伙伴们都需要剖析一些“oracle查询结果只显示10条”的相关资讯。那么小编同时在网络上汇集了一些有关“oracle查询结果只显示10条””的相关文章,希望咱们能喜欢,大家快快来了解一下吧!

最近遇到一个情况使用oracle查询空间数据非常慢。6条数据查询需要16.406秒。这样的速度几乎造成客户端不能使用。

SELECT SHAPE,OID  FROM T_TX_SHAPE T   WHERE 1=1   AND YXDW = '17863C81FE020719E05347F3D70AAC91'       AND  SDO_ANYINTERACT(    T.shape,    sdo_geometry(2003,NULL,NULL,        sdo_elem_info_array(1,1003,3),        sdo_ordinate_array(              101.79037505113350,              36.614572494162195,              101.7921211692023,              36.61704797308295))) = 'TRUE'

但是有个非常奇怪的现场是,在PLSQL中第一次耗时16秒,但是在执行一次耗时将会降低至0.75秒。

1、考虑是否在java代码中将过滤条件使用占位符,通过预处理查询来看是否可以提高查询速度。修改后的效果并不明显。几乎没有起到优化效果。

2、考虑将是否是空间函数SDO_ANYINTERACT造成的?后经过替换SDO_FILTER、SDO_RELATE等尝试,也没有根本上的效果,几乎都是10秒之上。

情况分析:

1、首先将查询语句的过滤条件完全去掉,查询速度并不慢。耗时0.282秒。

SELECT count(1) CN FROM T_TX_SHAPE T 

2、如果加上空间过滤查询,结果的速度1.25秒也不慢。

SELECT SHAPE,OID  FROM T_TX_SHAPE T   WHERE 1=1          --AND YXDW = '17863C81FE020719E05347F3D70AAC91'       AND  SDO_ANYINTERACT(T.shape, sdo_geometry(2003,NULL,NULL,       sdo_elem_info_array(1,1003,3),       sdo_ordinate_array(            101.79037505113350,            36.614572494162195,            101.7921211692023,            36.61704797308295))) = 'TRUE'

过滤条件增加YXDW,则速度将会变成10+秒。那么可以肯定我们的SQL应该没有走空间索引。所以考虑的方法是强制SQL走空间索引。

SELECT /*+ INDEX(t T_TX_SHAPE_INDEX)  +*/ SHAPE,OID  FROM T_TX_SHAPE T   WHERE 1=1     AND YXDW = '17863C81FE020719E05347F3D70AAC91'       AND  SDO_ANYINTERACT(     T.shape,      sdo_geometry(2003, NULL, NULL,           sdo_elem_info_array(1,1003,3),           sdo_ordinate_array(         		101.79037505113350,             36.614572494162195,             101.7921211692023,             36.61704797308295))) = 'TRUE'

加上空间索引之后,速度优化到了0.813秒。

这样也就解决了目前的查询慢的问题,但是为什么会出现加了其他过滤条件之后,就不走空间索引的问题还是没有头绪。希望以后能够明白真正的原因。

标签: #oracle查询结果只显示10条 #oracle写慢 #oracle查询速度慢 #oraclesql查询时间太长 #oracle导sql文件慢