2012-02-09 101 views
1

如果我在SQL Server 2000中刪除現有索引(和2008 R2中的效果類似),會發生什麼情況?刪除索引時會發生什麼問題?

我知道這可能會減慢一些查詢速度,但這是否會發生最糟糕的事情?

我正在查看索引調整嚮導,並試圖決定是否需要保留所有現有索引,否則如果過去的DBA應用了錯誤的索引,該怎麼辦?如果調整嚮導在保持現有關閉的情況下爲我提供了更高的改進百分比,我應該怎麼做?

+0

+1好問題! – 2012-02-09 18:42:44

回答

2
  • 慢下來,有時大幅
  • 下探唯一索引可能會導致數據unconsistancy,因此 - 錯誤的查詢結果計算列
  • 刪除索引 - 可以更爲顯着降低性能
  • 增加緩衝池的使用 - 因此可能會拒絕爲某些加載CLR代碼的內存提供服務,甚至無法進行常規查詢。由於內存不足會導致更頻繁的重新編譯
  • 可能會導致更多的死鎖
  • 可以大量增加的壓力,IO子系統
+0

- 沒有在所討論的表上進行計算。另外,這怎麼會導致不一致的數據? – MAW74656 2012-02-09 18:36:14

+1

@ MAW74656考慮在唯一列上連接兩個表。如果它產生了例如1行的結果,在獨奏結束後 - 連接可能會產生更多的行。還有更多 - 如果你有一些像** sum **這樣的聚合函數 - 其結果乘以 – 2012-02-09 18:42:05

+0

- 這聽起來像我永遠不要刪除索引... – MAW74656 2012-02-09 18:43:18

2

如果一個索引是一個唯一索引,它可以防止插入重複值。如果放棄它,可以在不恰當的地方輸入唯一值。

+0

- 我認爲這是一個約束? – MAW74656 2012-02-09 18:33:21

+3

每個UNIQUE約束都有其底層UNIQUE INDEX – 2012-02-09 18:34:17

2

的OP被帶領下來「永不刪除索引」路徑之前,讓我強調一下:永遠不要說永遠。

有時索引花費你比去除它們更多。有很多方法可以檢查這個問題,比如sys.dm_db_index_usage_stats(它可以告訴你有大量的寫入活動但很少或沒有讀取活動的索引)。

一如既往,您應該在具有真實數據和實際負載的孤立環境中測試您的更改。

+0

哈哈哈!孤立的環境!?哈哈哈... – MAW74656 2012-02-09 19:31:07

+1

爲什麼這很有趣?你是否對生產進行了所有改變,而沒有對其進行適當和徹底的測試?如果是這樣,我不會笑。我可能會把我的簡歷撣掉。 – 2012-02-09 19:33:41

+0

- 如果你在有測試環境的地方工作,你非常幸運。我的地方很便宜,你可以做到這一點,或者你根本不做。 – MAW74656 2012-02-09 19:36:52

相關問題