0

非常に大きくなったテーブルがあり、約 120 人のサブスクライバーにレプリケートしています。そのテーブルの FK にはインデックスがなく、問題を引き起こしているクエリで実行プランを実行すると、次のように表示されました -->

/*
Missing Index Details from CaseNotesTimeoutQuerys.sql - mylocal\sqlexpress.MATRIX (WWCARES\pschaller (54))
The Query Processor estimates that implementing the following index could improve the query cost by 99.5556%.
*/

/*
USE [MATRIX]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[tblCaseNotes] ([PersonID])

GO
*/

これを追加したいのですが、強制的に再初期化されるのではないかと心配しています。誰かが私の懸念を確認または検証できますか? そのように機能しますか、それとも各サブスクライバーでスクリプトを実行する必要がありますか?

任意の洞察をいただければ幸いです。

4

2 に答える 2

1

フィールドに FK 制約を追加しても、サブスクリプションの再初期化は強制されません。これは、(1) フィールドをテーブルに追加し、(2) このフィールドを FK として定義するときに使用する完全なコードです。

use myDb

alter table Tbl_myTable
    add 
    id_myOtherTable uniqueIdentifier Null
go
alter table Tbl_myTable
    add 
        constraint Tbl_myTable_myOtherTableP foreign key(id_myOthertable)
        references dbo.tbl_myOtherTable (id_myOtherTable)
go

これらの命令 (フィールドの追加、FK 制約の追加) は、再初期化せずにサブスクライブしているデータベースに複製されます。フィールドを追加する必要がない場合は、制約がすべてのデータベースで有効であることを強制的に確認する必要があります。何らかの理由で、サブスクライバー (s) がパブリッシャー (p) に設定された制約を尊重しない場合、制約は伝搬されず、サブスクリプションは停止します。次に、(p) から伝播された制約を受け入れるように、(s) のデータを手動で配置する必要があります。

于 2010-09-29T07:30:23.013 に答える
1

インデックスを追加してもテーブルが変更されて再初期化が発生することはありませんが、確認のためにテスト バージョンをセットアップすることをお勧めします。

于 2010-06-03T12:38:11.840 に答える