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

オラクルを使用している場合は、INSTR(insted LIKE'%)')で関数ベースのインデックスを使用できます。これで問題は解決します。

しかし、あなたの場合、LIKE'%..%'の問題は関係ありません。

  1. テーブル全体を更新していますが、本当に必要ですか?
  2. 本当にF_Stateに再度参加する必要がありますか?
  3. StateCodeにインデックス(または一意の制約)があり、ZipCodeにインデックスがありますか?

何をしているのかわかりませんが、Location.State_nameに'%)%'が含まれている場合にF_State.StateNameを設定しようとしていると思います。適切な場所は、F_StateのStateCodeと同じstateID(wtf、実際には?1つは非varchar IDで、もう1つはvarchar ...ですが、大丈夫です)と同じ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 '%)%';
于 2012-10-10T21:07:00.383 に答える