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

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

于 2010-06-03T12:38:11.840 回答
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)上设置的约束,则约束将不会被传播,并且订阅将停止。然后,您必须在 (s) 上手动安排数据,以便它接受从 (p) 传播的约束

于 2010-09-29T07:30:23.013 回答