我的应用程序中有多个表,它们都非常宽和非常高。宽度有时来自 10-20 列,具有各种数据类型 varchar/nvarchar 以及 char/bigint/int/decimal。我的理解是SQL中默认的页面大小是8k,但是可以手动更改。此外,varchar/nvarchar 列不受此限制,它们经常(总是?)移动到一个单独的位置,这个过程称为 Row_Overflow。Evenso,MS 文档指出 Row-Overflowed 数据会降低性能。“查询和执行其他选择操作,例如对包含行溢出数据的大记录进行排序或连接会减慢处理时间,因为这些记录是同步处理而不是异步处理的”
他们建议将大列移动到可连接的元数据表中。“然后可以在异步 JOIN 操作中查询”。
我的问题是,是否值得扩大页面大小以容纳宽列,还有其他性能问题吗?如果我没有这样做,而是将表分区为 1 个或多个元数据表,并且这些表在 100MM 记录范围内变得“大”,那么加入分区表不会远远超过好处吗?此外,如果 SQL Server 在单核机器上(或在 SQL Azure 上),我的理解是并行性被禁用,那么考虑到连接不再是异步的,这是否也会消除移动表引入分区的好处?您还有其他推荐的策略吗?
编辑:根据下面的精彩评论和一些额外的阅读(我本来应该做的),您不能手动更改 SQL Server 页面大小。此外,相关的 SO 帖子:我们如何更改 SQL Server 的页面大小?. 来自@remus-rusanu 的其他很好的答案