• Sqlserver填充因子测试


    CREATE TABLE [dbo].[test](
        [id] [int] IDENTITY(1,1) NOT NULL primary key,
        [aa] [int] NULL,
        [bb] [int] NULL)
        
    CREATE NONCLUSTERED INDEX [aa] ON [dbo].[test] 
    (
        [aa] ASC
        )
    
    CREATE NONCLUSTERED INDEX [bb] ON [dbo].[test] 
    (
        [bb] ASC
    )WITH (FILLFACTOR = 50)


    建立测试用的表,index_aa无填充因子,index_bb50%填充因子,然后开始灌数据

    declare @aa int
    declare @bb int
    set @aa=50
    set @bb=50
    while @aa<1000000
    begin
    insert into [test](aa,bb)
    select @aa,@bb
    set @aa=@aa+50
    end

    然后看一下索引占用页
    name page_count
    aa         35
    bb         35
    PK_test  52

    发现有填充因子和没有填充因子的索引,占用的数据页是一样的。

    然后我们再重建index_bb

    CREATE NONCLUSTERED INDEX [bb] ON [dbo].[test] 
    (
        [bb] ASC
    )WITH (FILLFACTOR = 50,DROP_EXISTING=ON)

    然后再看一下索引页
    name page_count
    PK_test 52
    aa        35
    bb        69

    发现重建后的索引才满足填充因子,所以填充因子只有在已经有数据的表里才有体现,在表初建时添加填充因子是没有意义的。

    然后我们继续测试一下,建完填充因子后,再往数据后添加时,填充因子是否有用。

    declare @aa int
    declare @bb int
    set @aa=1000001
    set @bb=1000001
    while @aa<10000000
    begin
    insert into [test](aa,bb)
    select @aa,@bb
    set @aa=@aa+500
    end

    然后再看索引数据页
    name page_count
    aa         66
    bb        100

    之间相差和之前相差的一样,还是34页,所以填充因子对之后的数据依然不起效果。

    总结一下,填充因子是一个看上去很美的东西,但是在表初建时完全无用,只有再重建索引时才会有所体验,然而对后期灌入的稍大数据一样不会有效果。

  • 相关阅读:
    作业要求 20201022-1 每周例行报告
    作业要求 20201015-3 每周例行报告
    20201008-1 每周例行报告
    20200924-1 每周例行报告
    总结
    20201126-1 每周例行报告
    20201120-1 每周例行报告
    20201112-1 每周例行报告
    20201105-1 每周例行报告
    20201029-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/lweia/p/3570861.html
Copyright © 2020-2023  润新知