前言:
而今姐妹们对“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文件慢