【问题标题】:Does index can affect update?索引会影响更新吗?
【发布时间】:2023-03-03 19:38:01
【问题描述】:

我有一张有一百万行的表。我正在尝试根据另一列的值更新特定列。

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)

【问题讨论】:

    标签: sql sql-server-2008 tsql indexing


    【解决方案1】:

    如果我在与其他表有关系的列上的 nyox 上创建索引会更快吗?

    这取决于有多少行的在相关表中有匹配的行。如果大多数行都有相关的记录,优化器可能会决定表扫描的执行效果一样好,因此索引不会产生任何影响。

    但是,nyerk.EmployeeNumberchoks.full_empNo 上的索引可能会加快更新速度。

    【讨论】:

      【解决方案2】:

      用这个测试
      显然,连接索引会有所帮助
      但是锁和设置将主导该更新

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-01
        • 1970-01-01
        • 2011-03-06
        • 2017-12-01
        相关资源
        最近更新 更多