0

DBA(トレーニングに2年しか使用していない)は、システム内のデータフローに必要なすべての属性を含む大規模なデータ管理テーブル(108列以上)を作成しました。このテーブルを略してBFTと呼びます。

これらの列のうち、
10はメタデータ参照用です。
15は、データソースおよび時間追跡
用です。テキストデータ用のnew / curr列の1インスタンス、
複数値の数値更新用のnew / current / delta / ratio / range列の10インスタンス:合計50列。

複数値の数値更新には、通常、2〜5個の更新グループのみが必要です。

15K〜1500KレコードのバッチがBFTにロードされ、ロジックを使用してストアドプロシージャによって処理され、それらのレコードが約30の他のテーブルの永続ストレージにシャッフルされます。

ほとんどのレコードロードでは、プロセス全体を通して50〜70の列が空になっています。

私はデータベースの専門家ではありませんが、このモデルとプロセスは少し臭いがするようですが、理由を説明するのに十分な知識がなく、代替手段を提供できずに文句を言いたくありません。

データ処理モデルに対するこの非常に小さな洞察を考えると、誰かが考えや提案を持っていますか?データベース(SQL Server)は、ほとんど空の列を持つレコードを効率的に処理することを信頼できますか、またはこの方法で処理すると、多くのサイクル/メモリなどが無駄になりますか?

4

4 に答える 4

3

彼はBizTalkを再発明したようです。

于 2009-06-16T21:51:31.417 に答える
1

ここでのキーワードは正規化です。NULL値が非常に多い場合は、多くのスペースを浪費している可能性が高くなります。テーブルを正規化すると、このテーブルのデータの整合性をより簡単に適用できるようになります。

于 2009-06-16T21:49:18.300 に答える
1

(正規化以外で) 物事をもう少し柔軟にする方法の 1 つは、データを表示するために 1 つ以上のビューまたはテーブル関数を作成することです。特にテーブルがあなたの管理外にある場合、これらは偽のがらくたをフィルターで除外し、テーブルから必要なものだけを取得することを可能にします.

しかし、あなたがその大規模なテーブルで作業する (そして、クラックを開く必要があるたびに眉をひそめる) 人の 1 人になる場合は、DBA の「設計」を打ち負かして、その獣を正規化することをお勧めします。 DBA にいくつかのビューやテーブル関数を作成するタスクを与えて、あなたを助けてください。

私は現在、同様のテーブルを使用していますが、それほど大きくはありません。これは、何年もの間システムに存在し、フランケンシュタイン スタイルに急いで追加された新しいフィールドとインデックスと制約がありました。残念ながら、他の一部のワークグループは構造に依存しているため、必要な方法でデータを「整形」できるように、そのようなビューと関数を作成しました。

于 2009-06-16T23:51:04.793 に答える
1

通常、入力負荷に対応する複数のステージング テーブルがあります。これらは宛先テーブルに対応する場合と対応しない場合がありますが、あなたが話していることはしません。彼が基本的に一時的な作業テーブルを多く持つことを好まない場合は、それらを独自のスキーマまたは別のデータベースに配置することもできます。

空の列に関しては、BFT を処理している特定のクエリでそれらが参照されていなければ問題ありません。クラスタ化されたカバリング インデックス。BFT が使用され、テーブル スキャンまたはクラスター化インデックス スキャンが選択されている場合、未使用の列を読み取って無視またはスキップする必要があります。これは、私の経験では処理に確実に影響するようです。一方、クラスター化されていないインデックスのスキャンまたはシークでは、読み取られる列が少なくなり、未使用の列が (m) 含まれないことを願っています。

于 2009-06-16T21:51:02.790 に答える