亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

SQL Server誤區:有關填充因子的誤區

標簽:
SQL Server

    本系列文章是我在sqlskill.com的PAUL的博客看到的,很多误区都比较具有典型性和代表性,原文来自T-SQL Tuesday #11: Misconceptions about.... EVERYTHING!!,经过我们团队的翻译和整理发布在AgileSharp上。希望对大家有所帮助。

 

误区 #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。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消