過去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%にジャンプします。
クラスタ化されたインデックスでさえ、空間の消費量はかなり浪費されます。誰もこの観察を説明することができますし、私の問題を解決するためのベストプラクティスがありますか?
フォーマットのおかげでMarc! –