程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server誤區30日談 第25天 有關填充因子的誤區

SQL Server誤區30日談 第25天 有關填充因子的誤區

編輯:MSSQL

SQL Server誤區30日談 第25天 有關填充因子的誤區。本站提示廣大學習愛好者:(SQL Server誤區30日談 第25天 有關填充因子的誤區)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server誤區30日談 第25天 有關填充因子的誤區正文


誤區 #25:多個有關填充因子的誤區
    都是毛病的

25a) 填充因子是一向存在的
    不是的,經由過程Books Online可以看到(譯者:我在新版的BOL沒有找到這句話):
主要:
填充因子僅僅在索引創立或重建時失效,SQL Server存儲引擎其實不會一向包管頁內的余暇值和填充因子堅持分歧。假如為了包管頁內的空余值和指定的填充因子堅持一向那末填充因子就會掉去意義。由於這時候頁即便不滿也須要停止分頁。

25 b)填充因子0和100是分歧的
    毛病,由BOL的一句話可以看到
    填充因子0和100在各個方面都是一個意思。

25 c)填充因子設置為0會在非葉子節點保存 空間
    這是毛病的,這一點BOL上沒有說,我也不曉得這個誤區從何而來,但這相對是毛病的。你可以經由過程以下代碼證明這一點:


CREATE DATABASE foo;
GO
USE foo;
GO
CREATE TABLE t1 (c1 INT IDENTITY, c2 CHAR (1000) DEFAULT 'a');
CREATE CLUSTERED INDEX t1c1 ON t1 (c1);
GO
SET NOCOUNT ON;
GO
INSERT INTO t1 DEFAULT VALUES;
GO 10000

接上去設置填充因子為0偏重建索引

SELECT [fill_factor] FROM sys.indexes
WHERE NAME = 't1c1' AND [object_id] = OBJECT_ID ('t1');
GO
ALTER INDEX t1c1 ON t1 REBUILD WITH (FILLFACTOR = 100);
GO

下面的代碼履行後,經由過程檢查既定頁中的m_freeCnt列的值,也就是頁中可用空間的值:

EXEC sp_allocationMetadata 't1';
GO
DBCC TRACEON (3604);
DBCC PAGE (foo, 1, 164, 3); -- the root page, from the SP output
GO
DBCC PAGE (foo, 1, 162, 1); -- the page ID in the DBCC PAGE output above
GO



經由過程下面代碼可以看到值為10,也就是說業內不存在保存空間。這時候一個誤區,有打開面sp_allocationMetadata的完成細節請看這篇博文:this blog post。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved