2016-08-11 7 views
1

過去60日間のデータを保持し、インデックスを提供して高速データ分析を可能にするログデータベースを見つけました。SQL Serverデータベースのインデックスを「最適化する」という奇妙な結果が、どうしてですか?

データベースは、26ギガバイトのデータ空間と10ギガバイトのインデックス格納のと、私は考え出し指標を分析した後から成っている〜50%が使用されることはありませんか、単に非効率的なので、私は次の変更を実行するように設定:

OLDを

IX          MODE     SIZE 
------------------------------------------------------------------------ 
PK_PerformanceData      CLUSTERED   26,09 GB 
IX_PerformanceData_Controller    NON_CLUSTERED   2,07 GB 
IX_PerformanceData_AppName    NON_CLUSTERED   1,89 GB 
IX_PerformanceData_ControllerMethod  NON_CLUSTERED   1,73 GB 
IX_PerformanceData_StartTime    NON_CLUSTERED   1,35 GB 
IX_PerformanceData_AppHost    NON_CLUSTERED   1,30 GB 
IX_PerformanceData_LogTime    NON_CLUSTERED   0,79 GB 
IX_PerformanceData_StatusCode    NON_CLUSTERED   0,57 GB 
IX_PerformanceData_ProcessException  NON_CLUSTERED   0,54 GB 

NEW

IX          MODE    SIZE 
--------------------------------------------------------------------- 
CIX_PerformanceData_AppName_Controller CLUSTERED  26,99 GB 
IX_PerformanceData_LogTime    NON-CLUSTERED  3,62 GB 
IX_PerformanceData_ProvId    NON-CLUSTERED  3,61 GB 
PK_PerformanceData      NON-CLUSTERED  3,57 GB 
IX_PerformanceData_ProcessException  NON-CLUSTERED  3,34 GB 

列:私は、これがいいとダンディ小Bツリー索引をもたらすだろうと思ったよう

VARCHAR(n) = Controller, AppName, ControllerMethod, AppHost 
DATETIME = StartTime, LogTime 
SMALLINT = StatusCode 
BIGINT = Id, ProvId 
BIT = ProcessException 

Iは、単一CLUSTERED一方(〜20の変形可能)に文字列入力したインデックスを変更しました。さらに、ジャーナルに関して何も使用していない指標の一部を削除しました。

インデックスストレージがすでにデータボリュームの約40%であり、10%を下回っていると思われました。残念ながら、それらは不当に大きくなり、すべてのインデックスがクラスター化された文字列リテラルを指しているように見え、データスペースの約52%にジャンプします。

クラスタ化されたインデックスでさえ、空間の消費量はかなり浪費されます。誰もこの観察を説明することができますし、私の問題を解決するためのベストプラクティスがありますか?

+0

フォーマットのおかげでMarc! –

答えて

1

クラスタ化インデックスがある場合、これは、そのテーブルを参照するすべてのインデックスのリーフノードのポインタになります。これにより、取得するデータがクラスタード・インデックスに格納されている場合、実際に取得するためにテーブルに移動する必要がないという点でパフォーマンスが向上します。

ベストプラクティスは、必要なものによって異なります。インデックスは、ディスク領域を犠牲にして読み取りパフォーマンスを向上させます。インクルードを使用するカバーされたインデックスのように、データを含むインデックスを作成すると、読み取り時のパフォーマンスとともにストレージの量が大幅に増加します。私は、インデックスは常に遅く書くと信じていますが、私は間違っている可能性があります。

私の意見では、お客様の要件と予算に合ったバランスを見つけることがベストプラクティスです。

+0

速い返答をありがとう。基本的に要件は満たされており、ディスククォータは問題ではありません。この結果は完全に直観的で非効率的であるように見えます。私が目指した目標は、リテラルフィールドの辞書的なインデックスと効率的なサイズの数値/日付インデックスです。 クラスタ化されたインデックスがまったく設定されていない場合、サーバーがどのように状況を処理するかを知っていますか? –

+0

あなたの質問によります。私はこの記事がトピックを非常によくカバーしていることがわかります。 https://www.simple-talk.com/sql/learn-sql-server/effective-clustered-indexes/ –

+0

情報をいただき、ありがとうございました。問題と私の実際の問題についてより深く理解することができました。構造体を再構築し、インデックス空間は従来の設定と同等のパフォーマンスで4GBまで低下します。 –

関連する問題