SQL Server误区30日谈-Day25-有关填充因子的误区

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
    本系列文章是我在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。

分类: SQL Server DBA误区



本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/archive/2013/01/22/2871202.html,如需转载请自行联系原作者

相关文章
|
4月前
|
SQL 数据采集 资源调度
【SQL 周周练】爬取短视频发现数据缺失,如何用 SQL 填充
爬虫爬取抖音和快手的短视频数据时,如果遇到数据缺失的情况,如何使用 SQL 语句完成数据的补全。
109 5
|
12月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
407 13
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
260 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
165 6
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
954 0
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
986 1
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
1034 3
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。

热门文章

最新文章