Sql-Server

減小主鍵索引的大小

  • September 8, 2021

我正在使用 Azure SQL DB,並註意到我最大的數據庫之一似乎有一個總大小為 6Gb 的主鍵索引。它是uniqueidentifier. 但是,在任何給定時間點,表中的總行數僅約為 78k 行。

此表儲存出站電子郵件和簡訊,因此它會定期填滿並清空。我們還對數據庫進行每週索引維護,所以我試圖理解為什麼這個 PK 索引看起來比它有任何理由要大得多。

在某些情況下,HTML 的電子郵件大小幾乎為 50KB。

通過我自己的本地測試,似乎從該表中刪除行確實減少了 PK 的大小,但這似乎並沒有在生產數據庫上發生。

然後我有什麼選擇來減少這個索引大小並釋放我想像的很多未使用的空間。

聚集索引的葉級行內數據,按聚集鍵邏輯排序。

78,000 行約 50KB 的電子郵件總計約 3.6GB 數據。

對於其他行數據和成本(行標題、頁面內未使用的空間),您的情況在預期範圍內。

請參閱文件中的估計聚集索引的大小。

據推測,您的本地測試是使用較小的非生產數據完成的。

具有許多插入和刪除模式的表往往會出現累積幽靈記錄的問題(標記為已刪除但未實際刪除的行,應該有一個稍後的非同步過程來清理它們 - 但是它可能會落後)。

如果您執行此查詢並發布結果,我們應該能夠查看這是否是導致您的問題的原因。

   select 
      sum(record_count) as records,
      SUM(PAGE_COUNT) AS pages,
      sum(ghost_record_count) as ghost_records,
      sum(version_ghost_record_count) as version_ghost_records
from sys.dm_db_index_physical_stats(
      db_id(), object_id('dbo.yourtable'), default, default, 'detailed')
where index_id = 1

引用自:https://dba.stackexchange.com/questions/299217