0

我有这个问题。我可以看到一些问题like

你们可以看看这个查询并帮助我优化它吗?我非常感谢您抽出时间在这里支持我。

  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

我有大约 300,000 行要更新......这根本没有帮助。你们能帮我解决吗?再次感谢大家!

4

1 回答 1

0

如果您在 oracle 上,您可以将基于函数的索引与 INSTR(insted LIKE '%)') 一起使用,这将解决您的问题。

但在您的情况下, LIKE '%..%' 问题不相关。

  1. 您正在对整个桌子进行更新,这真的有必要吗?
  2. 你真的必须再次加入 F_State 吗?
  3. 您在 StateCode 上有索引(或唯一约束),在 ZipCode 上有索引吗?

我看不到,你在做什么,但我猜你正在尝试设置 F_State.StateName,当它包含带有 Location.State_name 的 '%)%' 时。发现适当的位置具有与 F_State 中的 StateCode 相同的 stateID(wtf,真的吗?一个是 nonvarchar ID,一个是 varchar ......但没关系)以及相同的 ZipCode 和相同的城市。

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 '%)%';
于 2012-10-10T21:07:00.383 回答