我现在有一张表有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