Sqlserver充填因子試験

8013 ワード

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_bb 50%充填因子、次にデータの充填を開始
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を見てみましょうcountaa         35bb         35PK_test  52
埋め込み係数と埋め込み係数のないインデックスが見つかり、使用するデータ・ページは同じです.
そしてindexを再構築しますbb
CREATE NONCLUSTERED INDEX [bb] ON [dbo].[test] 
(
    [bb] ASC
)WITH (FILLFACTOR = 50,DROP_EXISTING=ON)

そしてインデックスページname pageを見てみましょうcountPK_test 52aa        35bb        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_を見てみましょうcountaa         66bb        100
間の差は以前と同じ34ページなので、充填因子はその後のデータには効果がありません.
まとめると、充填因子は美しく見えるものですが、表の初期構築ではまったく役に立たず、インデックスを再構築するときにしか体験できませんが、後期に注入された少し大きなデータと同じように効果はありません.
 
 
転載先:https://www.cnblogs.com/lweia/p/3570861.html