【问题标题】:Reason not to delete legacy Columns from a table?为什么不从表中删除旧列?
【发布时间】:2013-01-29 19:44:40
【问题描述】:

我的老板相信您永远不应该从生产中的表中删除列(它可能会弄乱索引)。多年来,这种“实践”导致我们的许多表因数百个未使用的遗留列而变得臃肿。

除了必须重构我们的(生成的)数据层之外,还有什么理由不从表中删除未使用的列吗?我的老板是否正确,它可能会损坏和索引或有其他副作用?

【问题讨论】:

  • 所以只需重建索引。作为定期维护的一部分,您的索引应定期修改。你的老板从哪里听说的?
  • 谁知道......他说这与索引被他们的数字列顺序或其他东西引用有关。我从来没有真正理解他想说什么

标签: sql-server tsql indexing alter-table


【解决方案1】:

我在删除列时从未遇到过类似的情况。您确实必须清理索引,因为我不相信您可以删除索引当前使用的列。但是无论如何您都应该这样做,因为在索引中保留未使用的列不会提高性能;它更有可能损害性能,因为索引中的列与所需的列不匹配。

此外,通过保留未使用的列,访问速度会变慢,因为不必要的列需要额外的空间(这会增加行大小,这意味着读取速度较慢并且单个数据页上的行数会减少)。

【讨论】:

  • 我想听听您对我刚刚发布的观点的看法(作为答案)
  • 这应该不是问题。如果不再需要某个列,则不应再使用它。这意味着它不应该被视图、函数或存储过程引用。如果其中任何一个引用了它,则使用它并且需要维护该列中包含的数据,否则您的系统将运行不正常。
【解决方案2】:

我看到的唯一副作用是通过减小表的大小和不使用空列(如果有的话)的更好的索引来提高性能。您不能删除索引正在使用的列,因此无论如何您都必须重新创建索引。继续并首先在测试环境中清理您的表,进行足够的测试以确保没有副作用(它不会),然后在生产中应用您的更改。另外,放开您的数据/业务建模师。

【讨论】:

    【解决方案3】:

    嗯...我开始考虑它,我想出了一个上面没有提到的问题。如果查询直接引用列,则删除列可能会破坏视图、函数和存储过程。在一个维护良好/优化的系统中,这可能不是问题(如果它真的没有被使用,那么它不应该在任何地方被引用)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-05
      • 2020-07-17
      • 2016-08-01
      • 2019-10-30
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多