在SQL Server中,如果我有一个很大的列,它将减少我可以在页面中拉出的行数(并且可能会增加访问时间)。
如果我从表中删除该列并将该数据放在一个更加孤立的表中,它将增加我可以在一页数据中提取的行数。
假设我完全从数据库中删除该列并将其完全放入单独的数据库中。这会减少数据库中所有内容的搜索时间吗?
更一般地说:何时将列移动到单独的表中是什么时候将它放在单独的数据库中?
答案 0 :(得分:1)
如果实际需要经常访问该列,则将其放在单独的表(或数据库)中会产生加入另一个表的需要。什么都没有保存。事实上,如果这个特定的性能考虑是移动列的唯一原因,性能将会变差。
如果您经常访问某个表的子集,但有时仍需要访问所有列,请考虑使用covering index进行此类查询。
答案 1 :(得分:1)
答案 2 :(得分:1)
在SQL Server中,如果我有一个很大的列,它会减少 我可以在页面中拉出的行数(并且可能会增加 访问时间)。
理论上是的。这取决于某些因素。它取决于数据类型,以及该列中包含数据的频率和数量。
如果我从表中删除该列并将该数据放入更多列中 隔离表它会增加我可以拉入的行数 数据页。
技术上是,但这又取决于几个因素。
假设我完全从数据库中删除该列并将其放入 一个单独的数据库。这会减少寻道时间吗? 数据库中的所有内容?
这取决于你使用数据库做什么,直到sql server管理内存等,但大多数情况下没有。我不会这样做。在不需要时跨数据库连接数据总是比它的价值更麻烦。有很多事情需要考虑,有备份计划,管理数据库增长等99%的时间,这是不值得的。
听起来你真的想要vertical partitioning来提高查询速度。现在理论上这可以帮助,但我猜你正在考虑的数据量并不能真正使这个有利。如果你希望你的查找速度更快,我会先查看查询执行计划,然后编写索引以确保完全按顺序。
移动现场速度应该是最后的手段,因为它使维护等更加繁琐。这种方法也必须向接管的任何人解释,但他们要质疑的第一件事是为什么所有这些1x1关系都存在,除非他们知道已经完成了性能攻击,否则他们可能会尝试并开始逻辑上将数据组织回来。