当前位置:Gxlcms > 数据库问题 > Oracle spatial空间查询的选择度分析

Oracle spatial空间查询的选择度分析

时间:2021-07-01 10:21:17 帮助过:3人阅读

 

    

用一个经纬度跨度均为1的矩形作为检索条件

explain plan for select * from DLTB20150705 where MDSYS.SDO_ANYINTERACT(shape, SDO_GEOMETRY(2003,4610,null,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(116,32,117,33)))=‘TRUE‘;

技术分享图片

此时执行计划的cardinality=14300,而真实返回的记录数是多少呢?

技术分享图片

显然,不是执行计划预计的14300 

 

现在我们把查询范围变大,设置纬度跨度均为2的矩形作为检索条件

explain plan for select * from DLTB20150705 where MDSYS.SDO_ANYINTERACT(shape, SDO_GEOMETRY(2003,4610,null,sdo_elem_info_array(1,1003,3),sdo_ordinate_array(116,32,118,34)))=‘TRUE‘;

技术分享图片

现在我们的查询范围变大了,但是cardinality仍然为14300。而此时返回的真实记录数是多少呢?

技术分享图片

确实比经纬度跨度为1的矩形返回的记录多,但即使如此,执行计划的cardinality与之前一致。 

 

到现在为止,我们看到的是结果:不同空间范围进行空间查询,其cardinality值不变化。那现在不禁要问,这个值是怎么计算得到的呢?那就得分析10053事件。 

技术分享图片 

分析tddc_ora_8438.trc文件,发现cardinality的计算方法如下:

技术分享图片

从该PLSQL BLOCK中可以发现,空间查询范围作为输入信息代入到代码段中去,最终得到的选择率为1/100。单从计算方法上看,似乎查询范围会影响到最终的selectivity计算结果,便其实并非如此。我们把范围再次从1度的跨度变为2度的跨度,然后得到10053trc

技术分享图片 

分析tddc_ora_8525.trc文件

技术分享图片 

范围变大了,但选择度仍然为1/100

 

我们再次回到前面的例子中,

技术分享图片

DLTB20150705表的记录数,根据之前的查询,为:

技术分享图片

14300 = round(1430023 * 0.01)

 

结论:

1SDO_ANYINTERACT操作符的选择度恒定为1/100。其它操作符的选择度有待验证。

Oracle spatial空间查询的选择度分析

标签:com   nali   使用   不同的   空间   oracl   image   ext   ati   

人气教程排行