我偶然發現了一個日誌數據庫,該數據庫旨在保留過去60天的數據並提供索引,從而實現快速數據分析。「優化」SQL Server數據庫索引的奇怪結果是什麼?
該數據庫包括了26GB數據空間和10GB索引的存儲和分析我計算的索引後,系統就不會使用的〜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
新
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
個色譜柱:
VARCHAR(n) = Controller, AppName, ControllerMethod, AppHost
DATETIME = StartTime, LogTime
SMALLINT = StatusCode
BIGINT = Id, ProvId
BIT = ProcessException
我改變了字符串類型索引到單個CLUSTERED一個(〜20度的變化可能的),因爲我認爲這將導致一個不錯的,很正常小B樹索引。此外,我刪除了一些對期刊沒有任何用處的指數。
在索引存儲已經是數據量的40%之前,我懷疑它降到10%以下。不幸的是,它們變得非常大,看起來每個索引都指向了聚簇字符串,因此跳到了大約52%的數據空間。
即使聚集索引的工作速度快得多,現在空間消耗也相當垃圾。任何人都可以解釋這個觀察,並有解決我的問題的最佳做法嗎?
感謝格式化馬克! –