Sql 使用相似的比较优化存储过程

Sql 使用相似的比较优化存储过程,sql,stored-procedures,Sql,Stored Procedures,我有这个问题。我可以看到的一些问题,比如 你们能看看这个查询并帮我优化一下吗?我真的很感谢你在这里抽出时间支持我 UPDATE F_State SET StateName = L.State_Name FROM Reg.Location L JOIN F_State S ON CONVERT(nvarchar, L.stateID) = s.StateCode --BECAUSE THIS IS NVARCHAR and ststeid isnt WHERE S.Stat

我有这个问题。我可以看到
的一些问题,比如

你们能看看这个查询并帮我优化一下吗?我真的很感谢你在这里抽出时间支持我

  UPDATE F_State
  SET StateName = L.State_Name
  FROM Reg.Location L 
  JOIN F_State S ON CONVERT(nvarchar, L.stateID) = s.StateCode  --BECAUSE THIS IS NVARCHAR and ststeid isnt
  WHERE S.StateName LIKE '%)%' 
    AND L.ZIPCODE = S.ZIPCODE 
    AND L.CITY=S.CITY

我有大约300000行需要更新…这根本没有帮助。你们能帮我解决吗?再次感谢你们

如果您在oracle上,您可以将基于函数的索引与INSTR一起使用(INSTR类似“%”),这将解决您的问题

但在您的情况下,例如“…%”问题与此无关

  • 您正在对整个表进行更新,这真的有必要吗
  • 你真的要再次加入联邦政府吗
  • 您在StateCode上有索引(或唯一约束),在ZipCode上有索引吗
  • 我看不出来,您在做什么,但我想您是在尝试设置F_State.StateName,因为它包含位置为“%”的Location.State_name。在F_州(wtf,真的吗?一个是非原始ID,一个是varchar…但okey)和同一个ZipCode和同一个城市中,发现合适的位置的stateID与StateCode相同

    UPDATE F_State S
       SET S.StateName = (SELECT State_Name 
                          FROM Reg.Location L 
                          WHERE CONVERT(nvarchar, L.stateID) = s.StateCode 
                            AND L.ZipCode = S.ZipCode 
                            AND L.City = S.City 
                          LIMIT 1)
     WHERE S.StateName LIKE '%)%';
    

    使用“%”之类的
    基本上会阻止SQL Server使用任何索引。如果你真的需要这个-在运行时你没有什么可以做的-你只需要耐心…@marc_s…嘿,现在快半个小时了,还在运行…?再次感谢各位。。