当创建一个新
索引,或重建一个存在的索引时,你可以指定一个填充
因子,它是在索引创建时索引里的
数据页被填充的数量。填充因子设置为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%的填满,但索引的中间页有预留的空间)。作为监控的一部分,你要决定新建索引或重建索引时的填充因子是多少。事实上,除了只读数据库,所有的情况,缺省值0都是不适合的。聚集索引(Clustered Index):对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即如果说在一个表中建立了聚集索引,则表中的数据页会在会按照索引的顺序来存放
非聚集索引(Nonclustered Index):具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序,即非聚集索引不会影响数据表中记录的实际存储顺序。非聚集索引的叶节点存储了组成非聚集索引的关键字值和行定位器。
填充因子:指索引中一个叶子节点的填充率,若都填满就是100%,若填充率为50%,则只有一半的数据
评论列表(0条)