【发布时间】:2014-02-26 21:05:59
【问题描述】:
如果我创建一个每页超过 8060 字节的 SQL Server 表,对于超过此限制的列,查询是否会受到很大影响?
如果一行占用整个 8060 字节,即使它是空的,我也不太明白。如果是这样,查询性能是否会仅针对超出限制的特定行或所有行受到影响?
【问题讨论】:
标签: sql sql-server performance
如果我创建一个每页超过 8060 字节的 SQL Server 表,对于超过此限制的列,查询是否会受到很大影响?
如果一行占用整个 8060 字节,即使它是空的,我也不太明白。如果是这样,查询性能是否会仅针对超出限制的特定行或所有行受到影响?
【问题讨论】:
标签: sql sql-server performance
对于第一个问题:
是的,它可能会影响性能。在一个表中组合 varchar、nvarchar、sql_variant 和 varbinary,总大小大于 8,060 字节会导致将数据重新分配到另一页。 虽然这会影响更新,但我不确定它对于读取数据是否太重要。在内部,SQL Server 会在新页面中放置一个指向重新分配的数据部分的指针,所以我猜这是相当快的操作。
由您(DBA/开发人员)来分析和预测表中此类行的百分比。如果它发生得太频繁,请考虑将大列移动到单独的表中。 使用 sys.dm_db_index_physical_stats 了解您的数据发生了什么。
第二个问题:
我猜你问的是某些列(尤其是 varchar)为空的情况。您可以使用sparse columns“帮助”SQL Server 来节省空间 另外,我推荐this 文章。
【讨论】: