SQL SERVER中,什么是填充因子?
答案:3 悬赏:70 手机版
解决时间 2021-03-23 12:32
- 提问者网友:骑士
- 2021-03-22 22:59
SQL SERVER中,什么是填充因子?
最佳答案
- 五星知识达人网友:天凉才是好个秋
- 2021-03-23 00:18
填充因子最简单的理解方法:
一张A4纸,用word去写东西, 写了两页 比如,每页10行,且只能容纳10行
现在你要修改第一页的内容,增加一行,在第9行增加,是不是从10行之后全部顺延下去,然后 word自动增加了第三页??
这个时候,如果你的填充因子是20行,但,你每页还是只填入了10行,
那么,你在第一页的第9行增加一行之后,发生了什么事?
恩,结果就是,仍是两页,且,第二页的文档没有发生任何变化。
这个时候,就有个问题啦: 在什么情况下用多大的填充因子呢? 呵呵。的确, 要看具体需要了,写的多,则大,查的多,则小,具体情况具体对待。
延伸:
索引最终要的参数:是填充因子。
当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量。填充因子设置为100意味着每个索引页100%填满,50%意味着每个索引页50%填满。
如果你创建一个填充因子为100的聚集索引(在一个非单调递增的列上),那意味着每当一个记录被插入(或修改)时,页拆分都会发生,因为在现存的页上没有这些数据的空间。很多的页拆分会降低sqlserver的性能。 举个例子:假定你刚刚用缺省的填充因子新创建了一个索引。当sqlserver创建它时,它把索引放在相邻的物理页面上,因为数据能够顺序的读所以这样会有最优的i/o访问。但当表随着、、增加和改变时,发生了页拆分。当页拆分发生时,sqlserver必须在磁盘的某处分配一个新的页,这些新的页和最初的物理页不是连续的。因此,访问使用的是随机的i/o,而不是有顺序的i/o,这样访问索引页会变得更慢。 那么理想的填充因子是多少呢?它依赖于应用程序对sqlserver表的读和写的比率。首要的原则,按照下面的指导: 低更改的表(读写比率为100:1):100%的填充因子 高更改的表(写超过读):50-70%的填充因子 读写各一半的:80-90%的填充因子 在为应用程序找到最优的填充因子前也不得不进行试验。不要假定一个低的填充因子总比高的好。低的填充因子会减少页拆分,它也增加了sqlserver查询期间读的页数量,从而减少性能。太低的填充因子不仅增加i/o开销,也影响缓存。当数据页从磁盘移到缓存中时,整个页(包括空的空间)都移到缓存中。所以填充因子越低,不得不移到sqlserver缓存中的页面就越多,意味着同时为其他重要数据页驻留的空间就少,从而降低性能。 如果你没有指定填充因子,缺省的填充因子时0,意味着100%的填充因子(索引的叶页100%的填满,但索引的中间页有预留的空间)。
一张A4纸,用word去写东西, 写了两页 比如,每页10行,且只能容纳10行
现在你要修改第一页的内容,增加一行,在第9行增加,是不是从10行之后全部顺延下去,然后 word自动增加了第三页??
这个时候,如果你的填充因子是20行,但,你每页还是只填入了10行,
那么,你在第一页的第9行增加一行之后,发生了什么事?
恩,结果就是,仍是两页,且,第二页的文档没有发生任何变化。
这个时候,就有个问题啦: 在什么情况下用多大的填充因子呢? 呵呵。的确, 要看具体需要了,写的多,则大,查的多,则小,具体情况具体对待。
延伸:
索引最终要的参数:是填充因子。
当创建一个新索引,或重建一个存在的索引时,你可以指定一个填充因子,它是在索引创建时索引里的数据页被填充的数量。填充因子设置为100意味着每个索引页100%填满,50%意味着每个索引页50%填满。
如果你创建一个填充因子为100的聚集索引(在一个非单调递增的列上),那意味着每当一个记录被插入(或修改)时,页拆分都会发生,因为在现存的页上没有这些数据的空间。很多的页拆分会降低sqlserver的性能。 举个例子:假定你刚刚用缺省的填充因子新创建了一个索引。当sqlserver创建它时,它把索引放在相邻的物理页面上,因为数据能够顺序的读所以这样会有最优的i/o访问。但当表随着、、增加和改变时,发生了页拆分。当页拆分发生时,sqlserver必须在磁盘的某处分配一个新的页,这些新的页和最初的物理页不是连续的。因此,访问使用的是随机的i/o,而不是有顺序的i/o,这样访问索引页会变得更慢。 那么理想的填充因子是多少呢?它依赖于应用程序对sqlserver表的读和写的比率。首要的原则,按照下面的指导: 低更改的表(读写比率为100:1):100%的填充因子 高更改的表(写超过读):50-70%的填充因子 读写各一半的:80-90%的填充因子 在为应用程序找到最优的填充因子前也不得不进行试验。不要假定一个低的填充因子总比高的好。低的填充因子会减少页拆分,它也增加了sqlserver查询期间读的页数量,从而减少性能。太低的填充因子不仅增加i/o开销,也影响缓存。当数据页从磁盘移到缓存中时,整个页(包括空的空间)都移到缓存中。所以填充因子越低,不得不移到sqlserver缓存中的页面就越多,意味着同时为其他重要数据页驻留的空间就少,从而降低性能。 如果你没有指定填充因子,缺省的填充因子时0,意味着100%的填充因子(索引的叶页100%的填满,但索引的中间页有预留的空间)。
全部回答
- 1楼网友:北方的南先生
- 2021-03-23 02:15
使用 fill factor 选项可以指定 Microsoft SQL Server 使用现有数据创建新索引时将每页填满到什么程度。由于在页填充时 SQL Server 必须花时间来拆分页,因此填充因子会影响性能。
仅在创建或重新生成索引时使用填充因子。页面不会维护在任何特定的填充水平上。
fill factor 的默认值为 0,有效值介于 0 和 100 之间。FILLFACTOR 设置为 0 或 100 时,叶级别几乎完全填满,但至少会保留一个其他索引行的空间。这样设置后,叶级别空间会得到有效利用,而且仍有空间可以在必须拆分页之前进行有限扩展。很少需要更改 fill factor 的默认值,因为可以使用 CREATE INDEX 或 ALTER INDEX REBUILD 语句来覆盖其对于指定索引的值。
仅在创建或重新生成索引时使用填充因子。页面不会维护在任何特定的填充水平上。
fill factor 的默认值为 0,有效值介于 0 和 100 之间。FILLFACTOR 设置为 0 或 100 时,叶级别几乎完全填满,但至少会保留一个其他索引行的空间。这样设置后,叶级别空间会得到有效利用,而且仍有空间可以在必须拆分页之前进行有限扩展。很少需要更改 fill factor 的默认值,因为可以使用 CREATE INDEX 或 ALTER INDEX REBUILD 语句来覆盖其对于指定索引的值。
- 2楼网友:天凉才是好个秋
- 2021-03-23 01:40
就是数据页的填充率。简单而言,如果你一份很长的EXCEL的文档打印出来,里面有很多1000条记录。如果你每张纸都打印100条记录,要用10张纸。但是当你发现你要往第108条记录后面插入一条记录,那你要从第二面开始的所有页面全部重新打印。(也就是2到10的每一个页面的行都会向后移动).可是如果你每页同样是可以打100条的数据,你只让它打印80条行,剩余20行留空,下次再离到这样要插入的时候,你只需要把数据插到第2页,然后再新打印这第2页的内容。即使一下子要在第二页插入30行数据,影响的只是2,3页的表。(对于数据库而言,就可尽量少的移动记录,从而提高性能。)
简而言之,这个 填充因子 就是这个页面的 填充率 。我们老师以前给我的比喻,我都能理解,相信你也能。
简而言之,这个 填充因子 就是这个页面的 填充率 。我们老师以前给我的比喻,我都能理解,相信你也能。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯