4

Identity主キーと通常の主キーのパフォーマンスに違いはありますか?

実際には、500 万行を超えるテーブルを作成したいと考えています。テーブルは、0.5 秒未満で 4 列にわたるフィルター条件を含むクエリを返す必要があります。

これらの 4 つの列 (すべて他のテーブルの主キー) はすべて数値であり、範囲が限られているため、4 つの列すべてを主キーに混在させることにしました。

たとえばcol1=500 | col2=500 | col3=900,000 | col4=9,000,000、列の範囲は 9,223,372,036,854,775,807 である可能性があるため、4 つの列すべてを主キーbigintに混在させたい場合は、それを提供できます。bigint

このソリューションに問題はありますか?

4

2 に答える 2

3

つま先を深海に浸す:

制約 (主キーや外部キーなど) は、パフォーマンスよりも有効性に影響します。通常、特定のクエリのパフォーマンスに大きな影響を与えるのは、基になるインデックスのレイアウトと構造です。確かに、テーブルに PRIMARY KEY 制約を適用すると、そのテーブルに UNIQUE インデックスが作成されますが、そのインデックスはクラスター化される場合とされない場合があります (作成方法と作成時期によって異なります)。

PRIMARY KEY が IDENTITY 列のクラスター化インデックスとして構築されている場合、定義により単調に増加します。クラスター化されたキーは、標準の INSERT 操作による断片化を最小限に抑えます。他の 4 つの列で構築し、データが非単調な方法で挿入されると、時間の経過とともにかなりの断片化が発生し、パフォーマンスの問題が発生する可能性があります。ただし、データが常に順番に挿入される場合、これは問題にならない可能性があります。

フィルタリングについて言及されましたが、結合についてはどうでしょうか。

于 2013-01-19T20:45:43.863 に答える
0

両方のソリューションは同じです:

1) PK4 列の複合体

2)BIGINT列 (身元の有無に関係なく) であるPK

インデックス作成の Sql Server メカニズムは両方で同じです。データはソートされ、場所に保存されます。次の方法で両方をテストできますStatistics

SET STATISTICS IO ON
SET STATISTICS TIME ON

私はそれをテストしましたが、それらは同じでした。

于 2013-01-19T19:40:10.790 に答える