我面临着必须向已经有 32 列的表添加 64 个新列。例如:
Customers
(
CustomerID int
Name varchar(50)
Address varchar(50)
City varchar(50)
Region varchar(50)
PostalCode varchar(50)
Country varchar(2)
Telephone varchar(20)
...
NewColumn1 int null
NewColumn2 uniqueidentifier null
NewColumn3 varchar(50)
NewColumn4 varchar(50)
...
NewColumn64 datetime null
...
CreatedDate datetime
LastModifiedDate datetime
LastModifiedWorkstation varchar(50)
LastModifiedUser varchar(50)
)
大多数情况下,这些新列中的大多数将包含null
.
如果我将这 64 个新列垂直分区到一个新表中,那么每次 iSELECT
来自客户:
SELECT ...
FROM Customers
必须将其转换为连接才能获得分区值(即,在我不需要新列的地方永远不会获得性能提升):
SELECT ...
FROM Customers
INNER JOIN Customers_ExtraColumns
ON Customers.CustomerID = Customers_ExtraColumns.CustomerID
所以这是对列进行分区的一个缺点。
另一个缺点是我必须同时管理将行插入两个表,而不仅仅是一个。
我能想到的最后一个问题是,SQL Server 现在必须在INNER JOIN
我想访问“客户”的任何时候执行。现在和永远都会浪费 CPU 和 I/O 来连接真正是一张表的表 - 除了我决定将它们拆分。
所以我的问题是:我为什么要把它们分开?
当它们大部分为空时,将 64 列垂直分区到单独的表中是否有任何价值?Null 占用的空间很小....
有哪些优点?
编辑:为什么我还要考虑分区?它主要是空数据,将使表中的列数增加三倍。肯定是坏了!