我的老板相信你永远不应该从生产中的表中删除列(它可能会弄乱索引)。多年来,这种“实践”导致我们的许多表变得臃肿,包含数百个未使用的遗留列。
除了必须重构我们的(生成的)数据层之外,还有什么理由不从表中删除未使用的列吗?我的老板是否正确,它可能会损坏和索引或有其他副作用?
我的老板相信你永远不应该从生产中的表中删除列(它可能会弄乱索引)。多年来,这种“实践”导致我们的许多表变得臃肿,包含数百个未使用的遗留列。
除了必须重构我们的(生成的)数据层之外,还有什么理由不从表中删除未使用的列吗?我的老板是否正确,它可能会损坏和索引或有其他副作用?
删除列时,我从未遇到过类似的情况。您必须清理索引,因为我不相信您可以删除索引当前使用的列。但是无论如何您都应该这样做,因为在索引中保留未使用的列不会提高性能;它更有可能损害性能,因为索引中的列与所需的列不匹配。
此外,通过保留未使用的列,访问将变慢,因为不必要的列需要额外的空间(这会增加行大小,这意味着读取速度较慢,单个数据页上的行数也会减少)。
我看到的唯一副作用是通过减小表的大小和更好的不使用空列(如果它们是)的索引来提高性能。您无法删除索引正在使用的列,因此无论如何您都必须重新创建索引。继续并首先在测试环境中清理您的表,进行足够的测试以确保没有副作用(它不会),然后在生产中应用您的更改。另外,放开您的数据/业务建模师。
嗯......我开始考虑它,我想出了一个上面没有提到的问题。如果查询直接引用列,则删除列可能会破坏视图、函数和存储过程。在维护良好/优化的系统中,这可能不是问题(如果确实没有被使用,则不应在任何地方引用它)。