in的优化,请教各位高手。

czphs 2011-04-23 04:18:56
create table tb1(name varchar(10),lng numeric(18,6),dmn numeric(18,6))
insert into tb1 select '桂东沙田', 113.807, 25.83 union
select '桂东广电', 110.933, 26.0564

create table tb2(name varchar(10),lng numeric(18,6),dmn numeric(18,6))

insert into tb2
select '径口',113.80257,25.822257 union
select '横屋',113.803948,25.820615 union
select '云岭',113.80613,25.821791 union
select '石桥镇',112.402757,25.736888 union
select '肖家镇',112.475639,25.69247 union
select '普满乡',112.516254,25.694456


select * from tb1 a,tb2 b where
b.name in(select top 10 name from tb2 order by
100*ROUND(SQRT(POWER((a.lng-lng),2)+POWER((a.dmn-dmn),2)),6) desc)


100*ROUND(SQRT(POWER((a.lng-lng),2)+POWER((a.dmn-dmn),2)),6) 是由经纬度计算距离的。
结果就是tb1中每个地标选b表中10个距离该地标最近的点。
tb1 有600多行,tb2有2万多行,运行了8个小时都没有出结果,请高手给优化下。
...全文
103 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
czphs 2011-04-25
  • 打赏
  • 举报
回复
终于学会建索引了,虽然貌似用处不是很大。
结果终于是出来了,springqingchun虽然你给的语句不对,但是临时表的思路还是有必要的,于是我又学会建临时表,和临时表里建索引。
感谢大家,抱歉结贴晚了点。
zheninchangjiang 2011-04-23
  • 打赏
  • 举报
回复
优化需要你的测试
zheninchangjiang 2011-04-23
  • 打赏
  • 举报
回复
使用规则建立默认的列,在其上建索引,也许会好一点
czphs 2011-04-23
  • 打赏
  • 举报
回复
呵呵,#jltemp 的数据量600*2w=1200w
select top 10 name into #jl
from #jltemp
order by juli desc
#jltemp 出来为10条数据,这个是错误的。

select   a.name n,b.name ,POWER((a.lng-b.lng),2)+POWER((a.dmn-b.dmn),2) juli   into   #jltemp 
from piloting_bts a , piloting_all b

select n,name,juli into #j from #jltemp where juli<0.01/*缩小点数据量,这个出来也有200w条记录*/

select a.name,b.name
from piloting_bts a,#j b
where b.name in
(select top 10 b.name from #j order by
juli desc)


貌似数据量还是大。






springqingchun 2011-04-23
  • 打赏
  • 举报
回复
计算量太大了哥们,
多插几个临时表吧
算法需要优化一下,数学没学好吧


select b.name ,POWER((a.lng-b.lng),2)+POWER((a.dmn-b.dmn),2) as juli into #jltemp
from tb1 a,tb2 b

select top 10 name into #jl
from #jltemp
order by juli desc

select *
from tb1 a,tb2 b
where b.name in
(select name
from #jl
)
AcHerat 元老 2011-04-23
  • 打赏
  • 举报
回复
给你name加索引,看看创建索引的SQL语句,或者直接在企业管理器里操作也可以。
czphs 2011-04-23
  • 打赏
  • 举报
回复
一点愚见,索引简单来说是不是就是编号,也即是在b表中另起一列给每行编序号就可以实现。
czphs 2011-04-23
  • 打赏
  • 举报
回复
高手我查了下索引的资料,太专业,头晕。能帮做下么?
快溜 2011-04-23
  • 打赏
  • 举报
回复
tb2的name上建索引。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧