2012-12-04 16 views
1

關於數據庫效率的閱讀我已經說過,表索引會對插入/更新/刪除操作產生額外的成本。在SQL Server上插入許多記錄之前禁用索引是一種很好的做法嗎?

處理單個記錄時這不是問題,但可能是在隱含多條記錄時。

我有幾個應用程序,我使用SQL Server作爲DBMS,並添加了導入操作,允許用戶在單個操作中將多個記錄加載到業務模型中,而不必爲每條記錄手動填寫表單。

現在我的問題是:SQL Server中的一個很好的做法是在導入操作執行之前禁用表索引?這可能取決於操作中涉及的記錄數量或數據量?是否有任何與此練習有關的伴侶問題,我必須注意?

回答

3

這取決於

  • 你需要多少行導入,
  • 你需要多久導入,
  • 進口需要多長時間,以及
  • 多少人受影響。

當您刪除索引時,將刪除它們給所有人。因此,針對受影響的表的每個查詢都將在沒有索引的情況下運行,直到您重建它

當您導入數百萬行時,刪除索引會產生很大的不同。但是,如果它影響到其他用戶,我將不會刪除索引,除非很清楚,沒有其他可行的方法來完成導入。您可能能夠避免被

  • 在同一時間(更多的交易)進口較少的行,
  • 導入到一個臨時表中第一或
  • 排隊進口影響其他用戶在下班時間進行。
相關問題