2015-12-22 71 views
0

我的谷歌搜索的权力不是为这一个足够强大。这全是理论问题。外键约束的大小

比方说,我有一个庞大的数据库与数百个表和每个表都有它引用用户表中的用户列。现在

,如果我想改变用户列有一个外键约束,将在数据库大小的增加而显着?

+0

取决于你的“* *巨大”的定义。但是,是的,数据库的规模会增加,这是显而易见的。但从注意到成为一个问题,可能有很大的不同。数据库增加的大小取决于数据库和表中的数据量(行数),而不是数据库(数百个表)的复杂度。我相信你可以在SSMS中看到一个对象在你的数据库中占据的大小,通过进入对象浏览器窗口,然后到你的对象,右键单击并去属性,但你必须先创建你的FK。 –

+0

@RaduGheorghiu:那是错误的。简单地定义一个_constraint_不以任何方式更改数据库的大小(除添加到系统目录中的几行) –

+0

@a_horse_with_no_name获得的经验,谢谢。 –

回答

2

如果“改变用户列有一个外键约束”你的意思是这样的:

alter table some_table 
    add constraint fk_some_table_users 
    foreign key (user_id) 
    references users (id); 

那么答案是:不,这绝不会改变你的数据库的大小(除了系统目录中的一些额外的行来存储约束的定义)。


的约束将改善你的数据的可靠性,并在某些情况下甚至可能有助于优化器移除不必要的加入或采取基于约束信息的其他快捷方式。然而,插入或删除行因为需要验证约束而导致性能开销很小。但是,这种小的开销并不会超过您在数据库中获得一致数据所带来的好处。

我从来没有见过哪个声称能应用到“有控制之下”这并不需要已经生产了一段时间后,数据清理。所以最好将这种检查留给数据库。