簡體   English   中英

我是否必須時不時地創建某個非聚集索引?

[英]Do i have to create a certain nonclustered index every now and then?

我有一個擁有超過5000萬條記錄的數據庫表,為了改善搜索,我必須創建一個非聚集索引,一旦我創建一個,需要創建5到10分鍾,所以我想在后台根據數據對數據進行排序到索引。

因此,例如在向我的表添加索引之前,搜索非常糟糕並且需要很長時間,並且當我添加非聚集索引時,搜索速度很快。

但那只是我有5000萬條記錄的時候。

問題是,如果在向表中添加任何數據之前創建表時最初定義了索引,該怎么辦? 它會提供我現在正在獲得的相同搜索性能嗎? 或者我是否必須不時刪除並重新創建索引以定期對數據進行排序?

我很抱歉,如果我的問題看起來很愚蠢,我剛開始學習索引,對我來說這是一個令人困惑的話題。

非聚集索引將索引字段的副本保存在為搜索而優化的特殊結構中。 在5000萬條記錄上創建索引顯然需要一些時間。

創建索引后,它會在添加,刪除或更新記錄時自動維護,因此如果系統或磁盤嚴重崩潰,您只需要重新索引。

因此,通常,最好在創建表時創建索引。

有一項稱為“更新統計信息”的操作可幫助查詢優化器提高其搜索性能。 數據庫引擎的細節有所不同。

數據庫索引的工作方式類似於書籍。

它實際上是指向表中正確行的指針,基於特定鍵(您為其定義索引的列)並對其進行排序。

所以,基本上,是的,如果你在插入數據之前創建索引,當你在表中加載了大量記錄時,你應該在以后使用它時獲得相同的搜索速度。

雖然,每次插入(或刪除或更新特定鍵)索引都需要更新時,插入(或刪除或更新)大量數據會慢一些。

如果在表上執行大量插入和刪除操作,索引可能會碎片化。 因此,刪除和重新創建它們通常是良好維護計划的一部分。

查看ola hallengren的免費腳本。 一個是索引維護和統計。

一般經驗法則,

索引碎片在10到30%之間,重新組織。

碎片> = 30 pct,重建。

通過重新組織,您需要更新統計信息。

重建會自動完成。

索引是優化查詢性能的重要部分。

  • 約翰

http://ola.hallengren.com/

可以在將數據插入到相關表中之前創建索引。 假設更新觸及相關索引中涉及的字段,則每次插入或更新行時都會更新索引。

插入行時,索引可能會碎片化,以允許索引在索引中維護所需的邏輯順序。 例如,如果索引包含A,B和E等行,並且您添加了包含C或D的行,則將拆分索引,以便新行適合B和E之間。可以使用Olla Hallengren的腳本作為Crafty修復此碎片DBA在他的回答中提到,但是根據你的系統存儲配置方式,這可能是無效的。

幫自己一個忙,看看http://www.brentozar.com/sql/index-all-about-sql-server-indexes/ ,了解SQL Server索引的一些優秀信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM