0

クエリのパフォーマンスまたは最適化に関して、個別のテーブルとタイプ列には違いがありますか?

例えば:

Create Table AllInOne(
  Key Integer Identity Primary Key,
  Desc varchar(20) Not Null,
  OneType Integer Not Null
)

OneTypeが1、2、または3のみを受け取る場合(整数値)

次のアーキテクチャとの比較:

Create Table One(
  Key Integer Identity Primary Key,
  Desc varchar(20) Not Null
)

Create Table Two(
  Key Integer Identity Primary Key,
  Desc varchar(20) Not Null
)

Create Table Three(
  Key Integer Identity Primary Key,
  Desc varchar(20) Not Null
)

別の可能なアーキテクチャ:

Create Table Root(
  Key Integer Identity Primary Key,
  Desc varchar(20) Not Null
)

Create Table One(
  Key Integer Primary Key references Root       
)

Create Table Two(
  Key Integer Primary Key references Root     
)

Create Table Three(
  Key Integer Primary Key references Root    
)

3番目の方法では、すべてのデータがルートに設定され、1つ、2つ、および3つのテーブルとの関係になります。

先日先生に聞いたのですが、違いがあるかと答えられませんでした。これらの3つのアプローチから選択する必要があるとしましょう。
一般的に使用されるクエリが型をフィルタリングしていると仮定します。そして、これらを参照する子テーブルはありません。

わかりやすくするために、給与制度について考えてみましょう。
1=着信
2=割引
3=計算のベース。

4

1 に答える 1

1

(2)のように個別のテーブルがあるということは、特定のOneTypeのデータにアクセスする必要がある人が、他のタイプのデータを無視できることを意味します。これにより、テーブルスキャンのI/Oが少なくなります。また、(2)のテーブルのインデックスは小さくなり、高さが低くなる可能性があります。つまり、インデックスアクセスのI/Oが少なくなります。

OneTypeの選択性が高いことを考えると、インデックスは(1)でのフィルタリングに役立ちません。ただし、テーブルパーティショニングを使用して、上記のすべての利点を得ることができます。

追加のメリットもあります。(2)をクエリするときは、クエリするテーブルを知るために必要なOneTypeを知る必要があります。(1)のパーティション化されたバージョンでは、不要なパーティションのパーティションの削除は、where節の述語で提供される値を介して行われる可能性があり、プロセスがはるかに簡単になります。

その他の利点には、データベース管理の容易さ(パーティション化されたテーブルに列を追加すると、すべてのパーティションに追加される)、スケーリングの容易さ(新しいOneType値のパーティションの追加が容易)が含まれます。また、前述のように、テーブルは外部キーの対象にすることができます。

于 2013-02-26T21:08:08.823 に答える