Sql-Server

何時在數據倉庫 ETL 中禁用和重新創建索引?

  • February 2, 2019

我們正在將數據從暫存數據庫移動到 Kimball 數據倉庫數據庫。我聽到關於何時禁用和重建索引的不同想法。每天為每個新負載截斷階段表。假設我們有一個客戶事務表,2000 萬行,5GB。初始負載為 2000 萬,每天增量為 100,000 行(小於 5%)

我正在閱讀最好的禁用新批次新負載的索引。

(a) 如果階段表每天都被截斷,對於階段:我應該每天禁用索引並重新啟用嗎?

Alter index all on dbo.[StageTable] disable

Insert Into StageTable values (CustomerId, SalesDate, SaleAmount)...

Alter index all on dbo.[StageTable] rebuild

在實際的數據倉庫中,

(b) 我是否應該為初始載入重新啟用和重建索引。我應該為較小的增量負載執行此操作嗎?

Alter index all on dbo.[DWTable] disable

Insert Into StageTable values (CustomerId, SalesDate, SaleAmount)...

Alter index all on dbo.[DWTable] rebuild

答案取決於許多因素:

  • 您的目標是什麼:最少的 I/O?載入時間最短?最少的設置?24/7 查詢性能?
  • 索引的重量:只有一個帶有 on ID 列的索引不會有太大的不同,但是有很多列的幾個索引會產生很大的不同。
  • 瓶頸是什麼?如果數據負載來自網路,如果您正在寫入高性能 SSD 子系統,則寫入磁碟可能不是瓶頸。如果您可以像通過網路一樣快地編寫表和索引,那麼您將無法做到更快。

所以確定你的目標是什麼,然後測試每種方法。對於 5 GB 的負載,它應該是一個快速測試。

說了這麼多,對於 5 GB 的負載,我不會費心去優化它。SQL Server 可以在幾秒鐘內編寫完成。選擇一個策略並執行它——如果它需要兩分鐘,那麼你只能讓它快 2 分鐘——值得你花時間嗎?如果您將此作為學習練習,請使用大量數據進行操作——這將需要 30 分鐘。

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