大規模なテーブル(13億レコード)で非常に簡単なUPDATE操作を試行している間、DBの処理時間は1時間以上です。 Execution Plan show賢いスプーリング。だから、変更に影響する前に、大部分または全体を一時DBにコピーしていると仮定します。大きなテーブルの簡単な更新でTSQL Eagerスプール
私の目的のために、私は一連の候補更新をループしています。この大規模なテーブルの各パスで0〜10のレコードを素早く変更する必要があり、小秒の方法で移行する必要があります。これを実現させる方法に関するアイデアはありますか?私はヒントや索引構造の変更を試みましたが、ほとんどのアイデアは公開されています。
表レイアウト:
CREATE TABLE [dbo].[its_financial_suppl_jnl]
(
[financial_suppl_jnl_key] [bigint] NOT NULL IDENTITY(1000000, 1),
-- ... { Omitting several column definitions }
[location_key] [int] NULL,
-- ... { Omitting several column definitions }
) ON [TA2]
GO
ALTER TABLE [dbo].[its_financial_suppl_jnl] ADD CONSTRAINT [PK_its_financial_suppl_jnl] PRIMARY KEY CLUSTERED ([financial_suppl_jnl_key])
GO
-- ... { Omitting 3 Non-clustered index definitions }
CREATE NONCLUSTERED INDEX [tmp1] ON [dbo].[its_financial_suppl_jnl] ([location_key], [financial_suppl_jnl_key]) ON [TA2]
-- ... { Omitting 12 FK definitions }
サンプルUPDATE文:
UPDATE its_financial_suppl_jnl
SET location_key = 964672
WHERE location_key = 507289
(それはLocation_Key 507289はテーブルに存在しないとして上記のクエリは、0レコードを更新してしまうことに注意することは興味深い。)
xmlとして実行プランを投稿することができます – TheGameiswar
あなたはあなたのループをどのようにしているかについての詳細情報も投稿できますか?熱心なスプールは一般的に問題ではありませんので、完全な排泄物の遊びは面白いでしょう。熱心なスプールは、ハロウィーンの問題を避けるために非常に重要です。 – Zi0n1