SQL 服务器中的分离和访问时间
Separation and access times in SQL server
在 SQL 服务器中,如果我有一个很大的列,它将减少我可以拉入页面的行数(并且可能会增加访问时间)。
如果我从 table 中删除该列并将该数据放在一个更孤立的 table 中,它将增加我可以在一页数据中提取的行数。
假设我从数据库中完全删除该列并将其完全放入一个单独的数据库中。这会减少数据库中所有内容的查找时间吗?
更一般地说:什么时候将列移动到单独的 table 是有意义的,什么时候应该将它移到单独的数据库中?
如果该列实际上需要经常访问,将它放在一个单独的 table(或数据库)中就需要连接到另一个 table。什么都没有保存。事实上,如果这种特定的性能考虑是移动列的唯一原因,性能会变得更差。
如果您经常访问 table 的子集,但您有时仍需要访问所有列,请考虑对此类查询使用 covering index。
micahhoover 你的问题读起来像是小林丸的场景。如果长数据大部分为空且大部分不需要显示,那么您可以将其放在另一个 table 中,以便您可以在页面中打包更多内容。但是,如果您的双 table 数据在 SQL 缓存中,那么它占用的 space 数量与将它放在相同的 table 中并加载 table进入缓存。
将数据放入另一个 table 时效果很好,当很少需要数据时,它将通过单独的查询检索,而不是在每次访问主 table 期间进行连接,这将导致性能impace Eric J.提到。
由于需要同步备份、日志文件备份等,将数据放入另一个数据库将是一场灾难。
只有一种方法可以确保您拥有最佳设计。唯一的方法是使用真实世界的数据和查询来对多个设计进行基准测试。
In SQL Server if I have a column that is large, it's going to reduce
the number of rows I can pull in a page (and presumably increase the
access time).
理论上是的。这取决于某些因素。这取决于数据类型,以及该列中包含数据的频率和数量。
If I remove that column from the table and put that data in a more
isolated table it will increase the number of rows I can pull in a
page of data.
从技术上讲是的,但这又取决于几个因素。
Suppose I remove that column from the database entirely and put it in
a separate database entirely. Will that decrease the seek times for
everything in the database?
就 sql 服务器管理内存等而言,这取决于您对数据库所做的操作,但大多数情况下不会。我不会这样做。在不需要时跨数据库连接数据总是比它的价值更麻烦。有很多事情需要考虑,例如备份计划、管理数据库增长等。99% 的时间,这是不值得的。
听起来您确实在尝试 vertical partitioning 来提高查询速度。现在理论上这 可以 有所帮助,但我猜想您正在查看的数据量不会真正使它变得有利。如果您希望查找速度更快,我会首先查看查询执行计划和索引以确保一切正常。
移动字段以提高速度应该是最后的手段,因为它会使维护等工作变得更加乏味。这种方法也必须向接手的任何人解释,但他们首先要质疑的是为什么所有这些 1x1 关系都存在,除非他们知道这样做是为了提高性能,否则他们可能会尝试并开始逻辑上组织数据回到一起。
在 SQL 服务器中,如果我有一个很大的列,它将减少我可以拉入页面的行数(并且可能会增加访问时间)。
如果我从 table 中删除该列并将该数据放在一个更孤立的 table 中,它将增加我可以在一页数据中提取的行数。
假设我从数据库中完全删除该列并将其完全放入一个单独的数据库中。这会减少数据库中所有内容的查找时间吗?
更一般地说:什么时候将列移动到单独的 table 是有意义的,什么时候应该将它移到单独的数据库中?
如果该列实际上需要经常访问,将它放在一个单独的 table(或数据库)中就需要连接到另一个 table。什么都没有保存。事实上,如果这种特定的性能考虑是移动列的唯一原因,性能会变得更差。
如果您经常访问 table 的子集,但您有时仍需要访问所有列,请考虑对此类查询使用 covering index。
micahhoover 你的问题读起来像是小林丸的场景。如果长数据大部分为空且大部分不需要显示,那么您可以将其放在另一个 table 中,以便您可以在页面中打包更多内容。但是,如果您的双 table 数据在 SQL 缓存中,那么它占用的 space 数量与将它放在相同的 table 中并加载 table进入缓存。
将数据放入另一个 table 时效果很好,当很少需要数据时,它将通过单独的查询检索,而不是在每次访问主 table 期间进行连接,这将导致性能impace Eric J.提到。
由于需要同步备份、日志文件备份等,将数据放入另一个数据库将是一场灾难。
只有一种方法可以确保您拥有最佳设计。唯一的方法是使用真实世界的数据和查询来对多个设计进行基准测试。
In SQL Server if I have a column that is large, it's going to reduce the number of rows I can pull in a page (and presumably increase the access time).
理论上是的。这取决于某些因素。这取决于数据类型,以及该列中包含数据的频率和数量。
If I remove that column from the table and put that data in a more isolated table it will increase the number of rows I can pull in a page of data.
从技术上讲是的,但这又取决于几个因素。
Suppose I remove that column from the database entirely and put it in a separate database entirely. Will that decrease the seek times for everything in the database?
就 sql 服务器管理内存等而言,这取决于您对数据库所做的操作,但大多数情况下不会。我不会这样做。在不需要时跨数据库连接数据总是比它的价值更麻烦。有很多事情需要考虑,例如备份计划、管理数据库增长等。99% 的时间,这是不值得的。
听起来您确实在尝试 vertical partitioning 来提高查询速度。现在理论上这 可以 有所帮助,但我猜想您正在查看的数据量不会真正使它变得有利。如果您希望查找速度更快,我会首先查看查询执行计划和索引以确保一切正常。
移动字段以提高速度应该是最后的手段,因为它会使维护等工作变得更加乏味。这种方法也必须向接手的任何人解释,但他们首先要质疑的是为什么所有这些 1x1 关系都存在,除非他们知道这样做是为了提高性能,否则他们可能会尝试并开始逻辑上组织数据回到一起。