Sql-Server

在 SQL Server 中刪除語句後回收空間

  • November 30, 2020

我有一些用於報告的表格,其中一些表格隨著每日 ETL 的增長而變得巨大,因此我實施了一些作業來刪除超過 x 天前的行。例如,每天添加 10% 的新數據,我在另一個作業中刪除 10% 的最舊行。

我需要做些什麼來提高效率嗎?有些表是具有非聚集索引的堆,有些表也具有聚集索引。例如,我需要在堆的情況下重建表或在表上的聚集索引的情況下重建索引?如果是這樣,多久一次?大多數表每天只使用一次,當所有連接和計算完成後,它們會以非實時方式被提取以進行視覺化。

我對索引碎片和堆碎片有一點了解,並且可以以百分比查詢碎片。

對於上述情況,我需要擔心多少?

您可以按照本指南辨識和解決堆/索引碎片:如何辨識和解決 SQL Server 索引碎片

您可能只需要重組,而不必經常擔心重建。有關於何時使用另一個的建議,但重建是一項繁重的操作,可能不會比重組帶來更多的好處。

雖然 2000 萬行是一小部分數據,但無論如何也算不上什麼大數據。我仍然可能會建議始終使用聚集索引,並且您會在這些表的 JOIN 和計算過程中看到最大的好處。

從某種意義上說,以一種智能的方式使用聚集索引也會為您重新組織您的數據。我的意思是,如果您每天將 2000 萬條記錄載入到一個空表中,然後在數據完全載入在該表上添加一個聚集索引,它將有效地組織在該聚集上排序的數據指數。它基本上可以代替手動重建/重組操作本身是相當繁重的操作。在數據完全載入後將聚集索引添加到表中通常是它重新組織數據的最有效方法。

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