我有一个包含一百万行的表。我正在尝试根据另一列的值更新特定列。
update m
set repname = e.LastName + ', ' + e.FirstName,
empNo = i.empNo,
DateHired = e.DateHired,
DateTerminated = e.DateTerminated,
TeamCode = e.TeamCode
from
nyox m
inner join
nyerk e on m.orderSplitRepNumber = e.EmployeeNumber
inner join
choks i on (m.orderSplitRepNumber) = i.full_empNo
如果我在列上的nyox上创建索引并在其他表上建立关系会更快吗?
CREATE Nonclustered INDEX ix_orderSplitRepNumber
ON nyox (orderSplitRepNumber)
答案 0 :(得分:1)
如果我在列上的nyox上创建索引并在其他表上建立关系会更快吗?
这取决于有多少行不在相关表格中有匹配的行。如果大多数行都有相关记录,优化器可能会认为表扫描也会表现一样,因此索引不会产生任何差异。
nyerk.EmployeeNumber
和choks.full_empNo
上的索引,但 可能会使更新更快。
答案 1 :(得分:0)
select m.orderSplitRepNumber,
e.LastName,
e.FirstName,
i.empNo,
e.DateHired,
e.DateTerminated,
e.TeamCode
from nyox m
join nyerk e
on m.orderSplitRepNumber = e.EmployeeNumber
join choks i
on m.orderSplitRepNumber = i.full_empNo
它是否有可能存在这些值?
采用写锁是昂贵的部分
如果您使用top子句,那么您将需要循环,但是在100万时,您可能会填写一个事务日志
with(nolock)是可选的,只有你知道它是安全的
update top (10000) m
set m.repname = e.LastName + ', ' + e.FirstName,
m.empNo = i.empNo,
m.DateHired = e.DateHired,
m.DateTerminated = e.DateTerminated,
m.TeamCode = e.TeamCode
from nyox m
join nyerk e with (nolock)
on m.orderSplitRepNumber = e.EmployeeNumber
join choks i with (nolock)
on m.orderSplitRepNumber = i.full_empNo
where m.repname <> e.LastName + ', ' + e.FirstName,
and m.empNo <> i.empNo,
and m.DateHired <> e.DateHired,
and m.DateTerminated <> e.DateTerminated,
and m.TeamCode <> e.TeamCode