【问题标题】:Size of Foreign key constraint外键约束的大小
【发布时间】:2016-03-28 12:52:00
【问题描述】:

我的谷歌搜索能力不够强大。这都是理论上的问题。

假设我有一个包含数百个表的庞大数据库,每个表都有一个引用用户表的用户列。

现在,如果我将用户列更改为具有外键约束,数据库大小的增加会很明显吗?

【问题讨论】:

  • 取决于您对“巨大”的定义。但是,是的,数据库的大小会增加,这将是显而易见的。但从引人注目到成为问题,可能存在很大差异。数据库增加的大小取决于数据库和表中的数据量(行数),而不是数据库的复杂性(数百个表)。我相信您可以在 SSMS 中查看对象在数据库中所占的大小,方法是转到“对象资源管理器”窗口,然后转到您的对象并右键单击并转到“属性”,但您必须先创建 FK。
  • @RaduGheorghiu:那是错误的。简单地定义一个约束不会以任何方式改变数据库的大小(除了添加到系统目录中的几行)
  • @a_horse_with_no_name 吸取教训,谢谢。

标签: tsql sql-server-2005


【解决方案1】:

如果通过“将用户列更改为具有外键约束”,您的意思是:

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

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


约束将提高数据的可靠性,在某些情况下甚至可以帮助优化器删除不必要的连接或根据约束信息采取其他快捷方式。但是,插入或删除行时会产生很小的性能开销,因为需要验证约束。但是这个小开销并不能超过您从数据库中拥有一致数据所获得的优势。

我从未见过一个声称能够“控制它”的应用程序在投入生产一段时间后不需要数据清理。所以最好把这种检查留给数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2017-04-20
    • 2018-03-05
    • 2013-01-30
    • 2014-01-16
    相关资源
    最近更新 更多