2016-07-16 13 views
1

の同様のセットのために読み出す:違いは、以下のコードでデータ

create table t(i int,j char(3000)) 
create table t1(i int,j char(3000)) 

create unique clustered index ixt on t(i) with (FILLFACTOR=20) 

declare @n int = 0 
while @n < 1000 
begin 
    insert into t values(@n*2,'a') 
    insert into t1 values(@n*2,'a') 
    set @n = @n+1 
end 

create unique clustered index ixt1 on t1(i) with (FILLFACTOR=20) 

上記テーブルの両方が同じ構造、データタイプとも同じデータを持っているが、それらを照会すると、私は異なる論理読み取り与えますtable t1リターンのクエリが複数の論理table tからクエリよりも読み、なぜ..

select * from t where i between 100 and 150 --returns 16 logical reads 
select * from t1 where i between 100 and 150 --returns 30 logical reads 

は、誰も私に教えていただけますか?

答えて

5

これは、(1回の表、1つのテーブルと最後のために、最初に作成)と係数の設定を記入変えた方法あなたは、インデックスを作成しているためです。..私たちが知っているよう

フィルファクターは、どのくらいを決定
Fill factor settingのみが表彰されます。空き領域が

強調が必要な..あなたがそれを設定すること20、無料の80%の残りの部分を残すように求めている。この場合には、インデックスのリーフレベルのページに残っていますインデックスが再構築または作成されたとき

最初のケース:あなたは20のフィルファクタを持つインデックスを作成していても
は、その空き領域が残っていないデータがないと、この設定を挿入光栄されていない間、私たちは知っています。

データが挿入され、SQLの設定を尊重するした後、あなたは、インデックスを作成している、ページになります。TABLE1のページを照会

はわずか500行

select object_name(object_id),index_depth,index_level,avg_fragmentation_in_percent,avg_page_space_used_in_percent,page_count from 
sys.dm_db_index_physical_stats(db_id(),0,-1,0,'Detailed') 
where object_id=object_id('t') 

enter image description here

セカンド場合があります示して

表2のページ数は1000行になります。

select object_name(object_id),index_depth,index_level,avg_fragmentation_in_percent,avg_page_space_used_in_percent,page_count from 
sys.dm_db_index_physical_stats(db_id(),0,-1,0,'Detailed') 
where object_id=object_id('t1') 

enter image description here

テーブル数が同じであっても、ページの数は、あなたがindex.Thisを作成する方法に異なっていますが、異なる論理が同じデータを各テーブルに読み込み、見ている理由で、構造

両方のインデックスを再構築した後でクエリを実行すると、同じ論理的な読み取りが表示されます

関連する問題