误区 #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. android开启线程的误区
  2. android开启线程的误区
  3. Android(安卓)新手常见的10个误区(下)
  4. Android深入理解Context–Context使用的误区
  5. 10个常见的Android新手误区
  6. 【点宽专栏】国信证券——关于量化选股之聚类分析的探讨
  7. 【点宽专栏】验证Fama French五因子模型在中国市场的表现(下)
  8. 【点宽专栏】验证Fama French五因子模型在中国市场的表现(上)
  9. 【点宽专栏】期货多因子(二)——各因子描述

随机推荐

  1. android imageView 图片显示方式属性
  2. android的异步加载与UI
  3. 【Gradle】Android Gradle 插件
  4. Android SDK Tools和Android SDK Platfor
  5. Android 面试题9
  6. Android四大图片缓存框架之-Fresco之init
  7. Android SDK Manager国内无法更新的解决
  8. android/java中短信pdu编码
  9. Android 之WebView
  10. android JNI 学习笔记1