数百万行のNVARCHAR(255)列をクリーンアップしようとしています。 355問題文字リストにある文字を置き換えたい(Á - > A)か、文字を削除したい。私は、問題の文字と置換文字を含むテーブルを作成しました。大規模なデータセットでSQL Server Characterが置換される
ループ型のバッチでいくつかのシナリオを試しました。私のローカルデベロッパーボックスで得た最高のパフォーマンスは、1分〜1.5分で約50,000行です。私はそれを改善することを望んでいます。新しいフィールドにはインデックスがありません。まず、問題キャラクタテーブルに参加するCTEです。
;WITH UctE (ID, Name, [Count]) AS (
SELECT ID, Name, 1 AS [Count]
FROM dbo.tableName t1
WHERE t1.ID BETWEEN @StartAtID2 AND @EndAtID2
UNION ALL
SELECT UctE.ID, CONVERT(NVARCHAR(255), REPLACE(UctE.Name, cr.ProblemChar, COALESCE( cr.ReplacementChar, '')))AS Name, [Count] + 1
FROM UctE,
dbo.CharReplace cr
WHERE cr.CharReplaceID = [Count]
)
UPDATE mp
SET nameversioned = ucte.Name
FROM dbo.Table1 mp
INNER JOIN UctE
ON UctE.Id = mp.ID
AND ucte.[Count] = 335
OPTION(MAXRECURSION 0);
このバージョンの別のバージョンでは、問題のある文字と置換文字をすべて含むreplaceステートメントが使用されています。 REPLACE(REPLACE ...無限大に。
;WITH UctE (ID, Name) AS (
SELECT ID, (SuperLongReplacestatement)
FROM dbo.tableName t1
WHERE t1.ID BETWEEN @StartAtID2 AND @EndAtID2
)
UPDATE mp
SET nameversioned = ucte.Name
FROM dbo.Table1 mp
INNER JOIN UctE
ON UctE.Id = mp.ID
OPTION(MAXRECURSION 0);
(REPLACE(REPLACE私もCTEのせずに試してみたが、私はバッチサイズは、CTEでパフォーマンスが向上することを期待していた。また、これは私の最初のものです時間の投稿は、私がrambledか悪いこれを書いているので、もし、私に知らせてください
大きなテーブルを更新する必要はありません。このような置換は、データのロード中に行われます。 –
データの何%を変更する必要がありますか? INSERT文を使用すると、すべてのデータを新しいテーブルにコピーし、元のテーブルとの間でパーティションを切り替えることができます。パーティションの切り替えはほとんど瞬間的です。これはETLジョブの一般的なテクニックです –
また、これらの文字はなぜ問題になると考えられていますか?彼らは単なる文字です。おそらく変換の問題はありますか?有効な文字を置き換えることは良い考えではありません。どこにいても変換問題を修正する方が良い –