在合并复制拓扑中将FK索引添加到现有表

时间:2010-06-03 12:33:53

标签: sql sql-server-2005 indexing replication merge-replication

我的桌子已经变得非常大,我们正在复制到大约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
*/

我想补充一点,但我担心会强行重新初始化。有人可以验证或验证我的疑虑吗?它甚至可以这样工作还是我需要在每个订户上运行脚本?

任何见解都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

添加索引不应该更改表以导致重新初始化,但我建议您设置测试版本以确保。

答案 1 :(得分: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)

传播的约束