又是一个优化问题,各位老大看看有什么好方法

shiming25 2004-05-02 01:07:14
有表一tbl_message,表二tbl_hlrarea
其中表一100万条记录,表二3万条记录
我现在要根据表二对表一进行更新操作,在表二中建有索引(hrl上)
下面这条语句会执行很慢,各位有没有好的写法。

update tbl_message set area=b.area from tbl_message a,tbl_hlrarea b where
b.hlr=substring(a.hlr,1,10)
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiming25 2004-05-03
  • 打赏
  • 举报
回复
哦,对了我可不可以这样,由于表b.hlr比较小我先取出符合条件的记录,比如:
select * into # tmp_p from tbl_hlrarea where len(hlr)=10
(这句话hlr索引好象就不起作用了,有没有其他的选择方法呢)

create index on #tmp_p(hlr)

然后:按照亮子大虾的方法:

update tbl_message set area=b.area from tbl_message a,#tbl_p where
a.hlr like b.hlr+'%'
shiming25 2004-05-03
  • 打赏
  • 举报
回复
使用这种写法的话,我就不能控制他的字符个数了啊!比如我b.hlr有12345和1234567890这样的话执行更新的话启不是不知道是用哪一个更新的啊!
SoarInAir 2004-05-03
  • 打赏
  • 举报
回复
试一下用like

update tbl_message set area=b.area from tbl_message a,tbl_hlrarea b where
a.hlr like b.hlr+'%'
shiming25 2004-05-03
  • 打赏
  • 举报
回复
可是这条语句确是有点慢,刚开始我也是用zjcxc的写法,可是那样的话更慢啊,因为那样的话就用不到建立在tbl_hlrarea中hlr上的索引了。关键是我那个大表中tbl_message用到了substring函数,这样这个表上面的索引就不起作用了。有没有其他的方法啊!
zjcxc 元老 2004-05-02
  • 打赏
  • 举报
回复
--试试:

update tbl_message set area=b.area
from tbl_message a,tbl_hlrarea b where
charindex(b.hlr,a.hlr)=1
zheninchangjiang 2004-05-02
  • 打赏
  • 举报
回复
这个语句很好呀
试试(应该是一样的效果):
update tbl_message set area=b.area from tbl_message a join tbl_hlrarea b on
b.hlr=substring(a.hlr,1,10)

34,590

社区成员

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

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