0

~90,000 行のテーブルの列を更新しようとしています。テーブルを更新する最適化された方法はありますか?

必要なインデックスを追加しました..テーブルのスキャン/ルックアップが発生しないようにします。それでも、実行にはかなりの時間がかかります (1 時間)。

私のシナリオ:

DECLARE @ParentID   NVARCHAR(100),
        @Con_ERID   INT

DECLARE @MaxCount   INT, 
        @MinCount   INT, 
        @Id         INT

SELECT @MaxCount = MAX(Id) from [dbo].[ParentIDStaging] where Type='grid'

SET @MinCount = 1

WHILE @MinCount <= @MaxCount 
BEGIN

SELECT @Id = ConID FROM [dbo].[ParentIDStaging] WHERE Id = @MinCount  and Type = 'grid'

IF @Id IS NOT NULL
BEGIN

SELECT  @Con_ERID   =   ErId    FROM Context (NOLOCK) Where ConId = @Id
SELECT  @ParentID   =   Identifier FROM Recording (NOLOCK) where ErId = @Con_ERID

    BEGIN TRAN

        UPDATE  [ParentIDStaging]       WITH (ROWLOCK)
        SET [ParentID]   = @ParentID
        WHERE   ContentType = 'grid'
        AND ConID   = @Id

    COMMIT
END

SET @MinCount = @MinCount + 1
END
4

3 に答える 3

0
UPDATE ParentIDStaging    
SET parentIdStaging.ParentID=recording.Identifier
from ParentIDStaging   
join Context on context.ConId = ParentIDStaging.ConId
join recording on contect.erid=recording.erId
WHERE   parentIdStaging.ContentType = 'grid'
AND parentidStaging.Type='grid'
于 2013-11-08T20:31:52.457 に答える
0

これは、一度に 1 つのレコードをループして更新し、明示的なロック/トランザクションを使用しているためです。

基礎となる構造を知らなくても、selectからの更新であなたがしようとしていることができると思います。

于 2013-11-08T20:23:00.647 に答える