一条SQL语句求优化

iammac 2011-04-04 04:29:38
两个表
T1(2万条数据) 和 T2(一百万条数据)

目的是比对T1和T2的ID字段或者是Name字段,只要有一个能匹配上就在T1设置flag并且把T2的某字段(例如location)赋给T1。


Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID
or
T1.Name=T2.Name

这个语句可行吗?我执行了大概快半个小时了还是没有结果。
分别对两个表的ID和Name设置了索引。
以有没有办法让结果更快一点?谢谢
...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxjnew 2011-04-05
  • 打赏
  • 举报
回复
不要写or, 分成两句sql来写!!
Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.Name=T2.Name
WHERE T1.flag = 0

liuweicai772 2011-04-05
  • 打赏
  • 举报
回复

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.Name=T2.Name
WHERE T1.flag = 0


andy_liucj 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fcuandy 的回复:]
SQL code
Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.Name=T2.Nam……
[/Quote]
+1
--小F-- 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fcuandy 的回复:]
SQL code
Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.Name=T2.Nam……
[/Quote]

同意FC的
Rotel-刘志东 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuam 的回复:]
Update T1
set flag=1,
Location = T2.Location
FROM T1,T2
where (T1.ID = T2.ID) or (T1.Name=T2.Name)
[/Quote]
or的效率是比较低的。
fcuandy 2011-04-04
  • 打赏
  • 举报
回复
Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.Name=T2.Name
WHERE T1.flag = 0
dearbinge 2011-04-04
  • 打赏
  • 举报
回复

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.ID = T2.ID

Update T1
set flag=1,
Location = T2.Location
FROM T1
inner join T2
on T1.Name=T2.Name

OR关键字会使索引失效,建议分成两条语句 --- 个人见解,楼主测试一下
xuam 2011-04-04
  • 打赏
  • 举报
回复
Update T1
set flag=1,
Location = T2.Location
FROM T1,T2
where (T1.ID = T2.ID) or (T1.Name=T2.Name)




喜-喜 2011-04-04
  • 打赏
  • 举报
回复
ID 和 Name 分两次写吧!上面写的那种感觉别扭...

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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