2017-02-12 5 views
2

GUIDフィールドに一意の制約があります。これにはパフォーマンス上のペナルティはありますか?私は、GUIDフィールドにインデックスを置くと断片化を引き起こす可能性があることをオンラインで読んでいます。ユニークな制約は断片化に苦しんでいますか?GUIDフィールドの一意制約のパフォーマンス上のペナルティはありますか

+2

おそらく、 –

+0

@DanBracukはい、大きなテキストにMD5ハッシュを計算し、テキストが一意であることを確認しています。これがフィールドにユニークなインデックスがある理由です。 – Luke101

+0

@ Luke101それはあなたの必要条件によって異なります。すなわち、読み取りまたは書き込みを探していると、断片化は挿入パフォーマンスを低下させます。 –

答えて

2

あなたは良いインデックスキーを使用して、インデックスではなくを使用している場合、あなたはそれはあなたにどのように影響するか、fragmentation.Thoughの費用を支払わなければならないが、depends on the way you query

ユニーク制約は、下のユニークな非クラスタ化インデックスとして適用されますcovers..belowはユニーク制約の断片化の小さな一例である

デモ:

create table dbo.temp 
(
id int identity , 
guidd uniqueidentifier unique default newid() 
) 



insert into dbo.temp 
(guidd) 
select NEWID() 
go 1000 

select object_name(object_id) as name,index_id,index_type_desc,avg_fragmentation_in_percent 
from sys.dm_db_index_physical_stats(0,0,null,null,null) 
where object_id=object_id('temp') 

name index_id index_type_desc avg_fragmentation_in_percent 
temp 0    HEAP    0 
temp 2   NONCLUSTERED INDEX 75 

あなたは非clusteを維持するため、ペナルティを支払わなければなりませんテーブルがヒープであるかクラスター化されているかにかかわらず、赤色の索引を作成します(記憶域を考慮する必要はありません)。クラスタ化インデックス/ヒープの挿入/削除/更新操作には、クラスタ化インデックスまたはヒープを変更するために2つの操作が必要になるため、クラスタ化されていないインデックスを変更するには1つを使用します。

関連する問題