2010-06-03 29 views
0

我有一張表已經增長得相當大,我們正在複製到約120個訂閱者。該表的FK沒有索引,當我跑這是造成它是這樣說的問題查詢執行計劃 - >將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 
*/ 

我想補充這一點,但恐怕也將強制重新初始化。任何人都可以驗證或驗證我的顧慮嗎?它甚至以這種方式工作,還是我需要在每個用戶上運行腳本?

任何有識之士將不勝感激。

回答

1

添加一個索引不應該改變表引起重新初始化,但我建議你設置一個測試版來確保。

+0

我是否需要單獨將其添加到每個訂閱服務器,還是將其從發佈服務器傳播下來? – 2010-06-03 13:00:51

+0

它需要被添加,索引不被複制。 – cjk 2010-06-03 13:09:09

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約束)被複制在沒有重新初始化的情況下訂閱數據庫。如果您不必添加該字段,則必須強制檢查該約束在所有數據庫上都有效。如果由於某種原因,訂閱者不遵守發佈者(p)上設置的約束,那麼約束將不會被傳播,並且訂閱將停止。您將不得不手動安排數據,以便它接受從(p)傳播的約束