使用LIKE比较优化存储过程

时间:2012-10-10 19:26:14

标签: sql stored-procedures

我有这个问题。我可以看到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行要更新....这根本没有帮助。你能帮我解决一下吗?再次感谢你们!

1 个答案:

答案 0 :(得分:0)

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

但在您的情况下,LIKE'%..%'问题无关紧要。

  1. 您正在对整个表格进行更新,这真的有必要吗?
  2. 你真的要再次加入F_State吗?
  3. 您对StateCode上有索引(或唯一约束)和ZipCode上的索引吗?
  4. 我无法看到,你在做什么,但我想你正在尝试使用Location.State_name设置包含'%)%'的F_State.StateName。发现Appropriete位置的stateID与F_State中的StateCode相同(wtf,真的吗?一个是非变量ID,一个是varchar ...但是okey)nad相同的ZipCode和同一个City。

    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 '%)%';