2014-05-15 55 views
2

快速問題我有一個有170萬條記錄的表格,並且執行了一個刪除操作,剩下的400k條記錄沒有問題。正常的刪除命令是否刪除這些記錄的索引?

我已經在這個表上多個索引,我只是想知道不正常

delete * from my_table where value = 1 

也使索引大小通過除去不再需要的,因爲刪除的記錄索引更小?

回答

1

數據從上刪除,以及維持更新和插入的指標去掉,在SQL Server

但是,表和索引的統計信息,除非你足夠的影響在各行不會自動更新表與您的查詢。
該閾值是我默認的20%的表格,所以如果你的刪除影響較小,可能值得自己更新統計信息。

這通常是因爲統計數據是索引使用的一部分(引擎使用統計數據來計算何時使用各種索引)並且即使在實際數據時也可能是「舊的」從物理索引中刪除。

0

從技術上講,指數應該保持自己,但數據庫將有它自己的做法。

MySQL會自動執行此操作,但Postgres有時需要手動運行vacuum命令。不確定其他數據庫。

+1

Postgres確實不需要真空來維護索引。 –

+0

你說得對,Postgres不需要它,但是當表變大並且查詢變得複雜時,我不得不將它作爲性能增強措施來運行。我的經驗是,如果你不指數就會失去它的速度優勢。 –

+0

聽起來好像你已經禁用自動真空,否則那不會是必需的 –