クラスター化された列ストアインデックスと外部キー


18

インデックスを使用してデータウェアハウスのパフォーマンスをチューニングしています。私はSQL Server 2014を初めて使用します。Microsoftは次のように説明しています。

「クラスター化された列ストアインデックスは、大規模なデータウェアハウジングファクトテーブルを格納するための標準であり、ほとんどのデータウェアハウジングシナリオで使用されることを期待しています。操作を削除します。」 http://msdn.microsoft.com/en-us/library/gg492088.aspx

ただし、ドキュメントをさらに読むと、制限と制限があります。

「一意の制約、主キーの制約、または外部キーの制約を持つことはできません。」

これは私をとても混乱させます!さまざまな理由(データの整合性、セマンティックレイヤーに表示される関係など)のために、データウェアハウスに外部キーを配置することをお勧めします(必須ではありません)。

そのため、Microsoftはデータウェアハウスシナリオのクラスター化列ストアインデックスを推奨しています。ただし、外部キー関係を処理できませんか?!

これは正しいですか?他にどのアプローチをお勧めしますか?過去には、データウェアハウスのシナリオで、クラスター化されていない列ストアインデックスを使用して、データロードのドロップと再構築を行いました。しかし、SQL Server 2014はデータウェアハウスに新しい価値を追加しませんか?


機能が成熟するにつれて、これらの機能の多くがサポートされるようになります(2012年、列ストアインデックスは読み取り専用でした!)。それまでの間、トレードオフが提供されます-制限付きの優れたパフォーマンス、または同じ古い同じ古い。また、DWのすべてのテーブルにクラスター化された列ストアインデックスが必要であり、どのテーブルにも制約がないことを意味するとは考えていません。バック。
アーロンバートランド

3
-結合を処理できることに注意してください。FK関係は、結合にはまったく必要ありません。参照整合性を処理するためにあります。これは便利ですが、データウェアハウスでは省略できます。リスクはありますが、パフォーマンスが向上します。
トムトム14年

8
また-「本当の新しい価値はない」?書き込み可能かつクラスタ化されていると、改善のように聞こえないということですか?ユーザーが最新のデータを取得するためにドロップして再構築するのを待つのではなく、リアルタイムでデータを照会できるようにすることは、ユーザーにとっては良いことではなく、メンテナンスの手間も少なくなりますか?肩をすくめる
アーロンバートランド

インデックス付きビューを作成することで、(一意の)インデックスを作成できます。インデックスメンテナンスのインフラストラクチャは既に存在しているようです。通常のインデックスが(まだ)実装されていないだけです。
usr 14年

@AaronBertrand外部キーを持つファクトテーブルを使用したDWHシナリオでは、クラスター化列ストアインデックスは機能しません。これは、Microsoftがこれを大きなファクトテーブルを格納する標準として期待しているのとは大きく対照的です。私が間違っていることを証明できるといいのですが...?私はSQL Serverが好きだからです。
OverflowStack 14年

回答:


13

ここにはたくさんの質問があります:

Q:(外部キーが不足している)私は非常に混乱しています!さまざまな理由(データの整合性、セマンティックレイヤーで表示される関係など)のために、DWHにFkを配置することをお勧めします(必須ではありません)。

A:正解です。通常、データウェアハウスに外部キーを配置することをお勧めします。ただし、クラスター化列ストアインデックスはまだサポートしていません。

Q:MSはDWHシナリオのクラスター化列ストアインデックスを推奨していますが、FK関係を処理できませんか?!

A:マイクロソフトはツールを提供します。これらのツールの使用方法はユーザー次第です。

最大の課題がデータウェアハウスのデータ整合性の欠如である場合、必要なツールは外部キーを持つ従来のテーブルです。

クエリのパフォーマンスが最大の課題であり、読み込みプロセスの一部として独自のデータ整合性をチェックする場合、必要なツールはクラスター化された列ストアインデックスです。

Q:しかし、SQL 2014はDWHに本当の新しい価値を追加しませんか?

A:ありがたいことに、クラスター化された列ストアは、SQL Server 2014の唯一の新機能ではありませんでした。たとえば、新しいカーディナリティ推定量を確認してください

Q:なぜ私のお気に入りの機能が実装されたのかについてとても怒って苦いのですか?

A:あなたは私を捕まえました-あなたは本当にその質問をしませんでした-しかし、私はとにかく答えます。すべてが正確な仕様に従って構築されているわけではないサードパーティ製ソフトウェアの世界へようこそ。マイクロソフト製品で見たい変更に情熱を感じるなら、Connect.Microsoft.comをチェックしてください。それはあなたが変更を提出し、他の人がそれを投票することができる彼らのフィードバックプロセスであり、それから製品チームはそれを読み、なぜ彼らがそれを実装しないのかをあなたに話します。時々。ほとんどの場合、彼らはそれを「修正しない、私のマシンで動作する」とマークしますが、ちょっと答えが得られることもあります。


「正しい、通常はデータウェアハウスに外部キーを配置することをお勧めします」-> SQLCAT-大規模リレーショナルデータウェアハウスを構築するためのベストプラクティストップ10 ...「外部キーごとに非クラスター化インデックスを構築します。」->リンクに記載されているFK関係の実施については何もありません。また、非CIは列ストアのために冗長であるため、ファクトテーブルにFKが不要であることを指摘しますか?これに関するあなたの考えに興味があります。
エイドリアントリー

1
...およびディメンションの場合:「ファクトテーブルとディメンションテーブルの間に外部キーの関係を強制しないで、データの読み込みを高速化します。NOCHECKを使用して外部キー制約を作成し、関係を文書化します。ただし、強制しないでください。しかし、「ルックアップを変換し、またはデータのソースでのデータの整合性チェックを実行
エイドリアントリー

6

慣れているものが欠けていると感じていることは理解できます。しかし、それはそれらが欠落しているからです。

それにもかかわらず、外部キーが単なる概念(当時はトリガーによって実装されていた)であり、制約などの物理的な実装ではない場合、SQL Serverは正常に使用されていました。宣言的参照整合性は、少なくともSQL Server 7.0までに存在していましたが、現在の実装よりもはるかに脆弱でした。

Clustered ColumnStore Indexの値に関しては、インデックスを提供し、行は更新可能です。この議論は価値があると思うかもしれません:http : //sqlwithmanoj.com/2014/07/24/maintaining-uniqueness-with-clustered-columnstore-index-sql-server-2014/

Manojは、PK(テーブル/ビューの最初の列)としてクラスタリングキーを使用して、このテーブルの上にインデックス付き/マテリアライズドビューを作成する方法があることを指摘しています。もちろん、それがあなたに合っているかどうかはあなたがしなければならない決定です。

しかし、Aaron BertrandとTomTomがコメントしたように、これはパフォーマンスの向上に関するものです。あなたに関係する他の問題を管理できれば(そしてそれら管理可能であると私は信じます)、あなたはかなりの利益を得ます。そのため、欠落している機能を自分で実行および管理できるものにColumnStoreを使用します。


2

この質問はSQL 2014に関連していますが、SQL 2016で列ストアインデックスに加えられた変更に照らして追加情報を提供したいと思います。異なるバージョンの制限を整理するのは難しく、この質問はまだGoogleでかなり高く浮上しています:

SQL 2016では、列ストアインデックスの前に制約が追加されている場合、非クラスター化btreeインデックス(クラスター化列ストアテーブルのセカンダリインデックスとして追加可能)を使用して外部キー制約を適用する方法について説明しています: https:// docs .microsoft.com / en-us / sql / relational-databases / indexes / columnstore-indexes-design-guidance

Niko Neugebauerにはこれに関するブログ記事もあります。実際には、列ストアテーブルに一意/外部の制約を直接作成することができます(このアプローチを私の仕事に適用しています):http ://www.nikoport.com/2015/09/15/columnstore-indexes-part-66- より多くのクラスター化された列ストア-改善-in-sql-server-2016 /

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.