Sqlサーバー:uniqueidentifierプラスの整数化合物PK---何型の指数です。
-
05-09-2019 - |
質問
い接合テーブルのmy SQL Server2005年のデータベースの情報収集-分析活動は二つの列:
object_id(uniqueidentifier)
property_id(整数)
これらの値によって化合物とその有効なタイプを利用します。
何が最良の方法をこのPK指標の選択実績を教えてください。
ばカラムが二つの整数、使おう化合物クラスタ化されたインデックスのデフォルト)。しかし、私の悪いところが集積指数がuniqueidentifiersするものです。
誰もが経験す。
解決
はい、GUIDのは、クラスタ化インデックスの本当に悪いです。
キム・メーカーTrippさんのブログを参照してください - 最も有名な「クラスタ化インデックス議論が続けの「および 『<のhref =』 http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx」 = "nofollowをnoreferrer" PRIMARYとして>のGUIDおよび/またはクラスタ化キーの」REL - 。貴重なバックグラウンド情報の多くのための
あなたは本当にこれらの二つの列にインデックスを持つ必要がある場合は、私は非クラスタ化インデックスをお勧めしたい - それは主要な指標となる - 。ちょうど良くないクラスタ化インデックス
マルク
他のヒント
1つの選択肢は、(偶然にも、主キーとして割り当てることができる)代理キーとして知られるものを使用することです。
たとえば、一意すなわち、主キーテーブル内の各行を識別するために使用することができるID列を追加します。
GUIDは(間違いなくここでは、私たちにとって問題ではありませんがリレーショナル正しい実践されていない)SQL Server内のグローバルレコードを識別するために使用されていることを理解します。
ID列は、今も主キーは/クラスタ化インデックスが適用されますすることができます。別個の、非クラスタ化インデックスは、元のポスターによって記載される化合物のキーに適用することができる。
この方法は、データベース内で定義された関係を維持しながら、頻繁なページ分割がクラスタ化インデックス(ランダムGUID主キーへの挿入)内で発生するだけでなく、より小さく、より効率的なクラスタ化インデックスを生成する問題を回避します。
私は、私は、ID列を作成&このプライマリキー&クラスタ化インデックスを作成します。その後、必要に応じてOBJECTID propertyid上の非クラスタ化インデックスを作成することができます。
あなたはキーの一意性を保証するために、一意性制約を作成することができます。
この理由は、行がので、あなたは、ページ分割を減らし、順次挿入されることです。あなたのPKのための整数を使用して加えて、あなたは、クラスタ化インデックスの値を小さくする必要があるということです。