oracle查询的结果集作为条件,oracle将计算结果当做查询条件如何提高性能

我现在有一张表有300多万条数据,需求是从这些记录中随机抽取一条和余下的所有记录通过经纬度进行距离的计算,并且筛选出距离小于8km的距离数值

我已经用sql实现 但是性能特别差 需要1分10秒左右 领导的要求最好是在10s之内,希望大佬们指点一下小弟,以下是我的sql

select distance from (

select

--计算两点距离的公式

trunc(SQRT(

power(((TB_GC_COMPONENTINFO.ZB_X - random_tc.zb_x) * 3.14159265358979323 * 6371229 *cos((TB_GC_COMPONENTINFO.ZB_Y

random_tc.zb_y) / 2 * 3.14159265358979323 / 180) / 180),2)

power(((TB_GC_COMPONENTINFO.ZB_Y - random_tc.zb_y) * 3.14159265358979323 * 6371229 / 180),2))

/ 1000,2)

as distance

from TB_GC_COMPONENTINFO,

--随机抽取一条记录

(select zb_x,zb_y,bzm from TB_GC_COMPONENTINFO sample(10) where rownum<2) random_tc

where TB_GC_COMPONENTINFO.bzm!=random_tc.bzm

)

where distance<8

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值