盡管存儲的成本已經很低了,但是我們仍然需要考慮使用多種技術(例如壓縮和存檔)來節省空間。當你思考怎樣節省空間時,你第一個想到的是文件系統,但是空間節省也可以用在數據庫。當我們創建一個數據庫時,我們確保數據文件具有合適的大小和增長速度。
我們定期分析我們的數據庫規模并執行縮小操作。我們可能執行這些任務用于不同的目的,但是有一個方面是相同的,這些任務幫助我們確保我們的數據庫具有最佳的存儲。Microsoft SQL Server為我們提供了用于降低數據庫所用空間的各種技術。SQL Server 2008推出了一個用于定位可為空字段的技術,它為可為空字段提供了最佳的存儲。在SQL Server 2008中的這個新特性就是稀疏列。這篇文章不會講述很多關于稀疏列的特性,它介紹了具有列集的稀疏列的使用,以及在使用它們時你需要了解和考慮的事情。
這篇文章描述:
◆什么是稀疏列?
◆什么是列集?
◆在一個列集中插入和更新數據。
◆使用觸發器跟蹤變更。
◆對列集實施安全。
什么是稀疏列?
稀疏列是一個普通字段,就像其它字段一樣,但是它降低了對空值的存儲要求。一個可為空字段可以在表創建或修改時添加SPARSE關鍵字來成為稀疏列。如果一個列是稀疏列,那么SQL Server不會為空值分配空間。注意,在使用這個特性時它會增加對非空值數據提取的花費。因此你需要計算可以節省的空間來仔細地對字段應用這個特性。推薦只在空間至少可以節省20%至40%時使字段成為稀疏列。BLO提供了一個包含字段中每個數據類型所需空值百分比的表,以便使這些字段成為稀疏列。
什么是列集?
列集是一個顯示所有稀疏列的字段,它作為一個XML類型的字段添加到表中。它不是物理上存在于這個表中的,它只像是一個計算出來的字段,但是它允許你對它進行修改。推薦你只在有很多稀疏列時使用列集,因為如果使用了列集而不是使用各個稀疏列,那么它會加快修改和提取。
下面的代碼顯示了為一個表創建一個列集的方法。
代碼1:創建一個具有稀疏列和一個列集的表。
CREATE TABLE [dbo].[Customers]
(
[Id] int PRIMARY KEY,
[FirstName] varchar(50) NOT NULL,
[LastName] varchar(50) NOT NULL,
[Gender] bit SPARSE NULL, -- 1 = male, 2 = female
[Telephone] varchar(15) SPARSE NULL,
[MonthlyIncome] money SPARSE NULL,
[Comments] varchar(1000) SPARSE NULL
[AllSparseColumns] xml COLUMN_SET FOR ALL_SPARSE_COLUMNS
)
我為所有可為空字段添加了SPARSE關鍵字,但是如同我前面提到的,應該在使它們成為稀疏列之前分析空值所占百分比。注意,當你創建這個表時你需要添加這個字段。SQL Server 不允許你沒有稀疏列的情況下擁有列集字段。之后添加為稀疏列的字段可以使用添加的列集,看下面的代碼:
代碼2:創建具有一個列集的表,不使任何字段成為稀疏列。
-- adding column set without sparse columns
CREATE TABLE [dbo].[Customers_1]
(
[Id] int PRIMARY KEY,
[FirstName] varchar(50) NOT NULL,
[LastName] varchar(50) NOT NULL,
[Gender] bit NULL, -- 1 = male, 2 = female
[Telephone] varchar(15) NULL,
[MonthlyIncome] money NULL,
[Comments] varchar(1000) NULL,
[AllSparseColumns] xml COLUMN_SET FOR ALL_SPARSE_COLUMNS
)
-- inserting a record
INSERT INTO dbo.Customers_1
([Id], [FirstName], [LastName], [Gender], [Telephone], [MonthlyIncome], [Comments])
VALUES
(1, 'Dinesh', 'Priyankara', 1, '777395871', 20000, 'no comments')
-- this returns null
SELECT AllSparseColumns FROM dbo.Customers_1
-- Make the Gender column as a sparse column
ALTER TABLE [dbo].[Customers_1]
ALTER COLUMN [Gender] bit SPARSE NULL
GO
-- Make the Telephone column as a sparse column
ALTER TABLE [dbo].[Customers_1]
ALTER COLUMN [Telephone] varchar(15) SPARSE NULL
-- Now it returns values of sparse columns as a xml
SELECT AllSparseColumns FROM dbo.Customers_1
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com