既に 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
。
また、これらSELECT
の 64 個の新しい列を新しいテーブルに垂直方向に分割すると、顧客からのたびに次のようになります。
SELECT ...
FROM Customers
分割された値を取得するには、結合に変換する必要があります (つまり、新しい列を必要としない場合にパフォーマンスが向上することはありません) 。
SELECT ...
FROM Customers
INNER JOIN Customers_ExtraColumns
ON Customers.CustomerID = Customers_ExtraColumns.CustomerID
これは、列を分割することの 1 つの欠点です。
もう 1 つの短所は、行を 1 つだけではなく 2 つのテーブルに同時に挿入する必要があることです。
私が考えることができる最後の詐欺は、SQL Server が「 CustomersINNER JOIN
」にアクセスしたいときにいつでも実行する必要があるということです。実際には 1 つのテーブルであるテーブルを結合するための CPU と I/O の浪費は、今後も永遠に続きます。ただし、それらを分割することにした場合を除きます。
だから私の質問は:なぜ私はそれらを分割するのですか?
ほとんどがnullになる場合、64列を別のテーブルに垂直に分割することに価値はありますか? Null はほとんどスペースを占有しません....
長所は何ですか?
編集:なぜ私はパーティショニングを考えているのですか? テーブル内の列数を 3 倍にするのは、ほとんどが null データです。きっと悪いに違いない!