SQL Server中的分离和访问时间

时间:2015-04-15 17:44:29

标签: sql-server database-design sql-server-2008-r2 sql-server-2012 database-schema

在SQL Server中,如果我有一个很大的列,它将减少我可以在页面中拉出的行数(并且可能会增加访问时间)。

如果我从表中删除该列并将该数据放在一个更加孤立的表中,它将增加我可以在一页数据中提取的行数。

假设我完全从数据库中删除该列并将其完全放入单独的数据库中。这会减少数据库中所有内容的搜索时间吗?

更一般地说:何时将列移动到单独的表中是什么时候将它放在单独的数据库中?

3 个答案:

答案 0 :(得分:1)

如果实际需要经常访问该列,则将其放在单独的表(或数据库)中会产生加入另一个表的需要。什么都没有保存。事实上,如果这个特定的性能考虑是移动列的唯一原因,性能将会变差。

如果您经常访问某个表的子集,但有时仍需要访问所有列,请考虑使用covering index进行此类查询。

答案 1 :(得分:1)

michahoover你的问题就像小林丸一样。如果长数据大部分为空并且通常不需要显示,那么您可以将其放在另一个表中,这样您就可以在页面中打包更多。但是如果你的双表数据在SQL缓存中,那么它占用的空间与将它放在同一个表中并将表加载到缓存中的空间相同。
将数据放入另一个表时,如果不经常需要数据,它将通过单独的查询检索,而不是在主表的每次访问期间进行连接,这将导致Eric J.提到的性能不佳。 由于需要同步备份,日志文件备份等,将数据放入另一个数据库将是一场灾难。 只有一种方法可以确保您拥有最好的设计。唯一的方法是使用REAL世界数据和查询对几个设计进行基准测试。

答案 2 :(得分:1)

  

在SQL Server中,如果我有一个很大的列,它会减少   我可以在页面中拉出的行数(并且可能会增加   访问时间)。

理论上是的。这取决于某些因素。它取决于数据类型,以及该列中包含数据的频率和数量。

  

如果我从表中删除该列并将该数据放入更多列中   隔离表它会增加我可以拉入的行数   数据页。

技术上是,但这又取决于几个因素。

  

假设我完全从数据库中删除该列并将其放入   一个单独的数据库。这会减少寻道时间吗?   数据库中的所有内容?

这取决于你使用数据库做什么,直到sql server管理内存等,但大多数情况下没有。我不会这样做。在不需要时跨数据库连接数据总是比它的价值更麻烦。有很多事情需要考虑,有备份计划,管理数据库增长等99%的时间,这是不值得的。

听起来你真的想要vertical partitioning来提高查询速度。现在理论上这可以帮助,但我猜你正在考虑的数据量并不能真正使这个有利。如果你希望你的查找速度更快,我会先查看查询执行计划,然后编写索引以确保完全按顺序。

移动现场速度应该是最后的手段,因为它使维护等更加繁琐。这种方法也必须向接管的任何人解释,但他们要质疑的第一件事是为什么所有这些1x1关系都存在,除非他们知道已经完成了性能攻击,否则他们可能会尝试并开始逻辑上将数据组织回来。