第十章 維護索引(6) 查詢無用索引

2021-07-08 09:49:11 字數 2704 閱讀 5781

眾所周知,索引對效能的提公升有巨大作用。但是這是有代價的,索引需要磁碟空間來存放它的b-tree,並且用於在每次dml執行後更新資訊,所以應該在一定時期內檢查有無無用索引。

記住別在重啟伺服器之後進行資訊收集,因為dmo將會清空,而資料會非常不準確甚至是錯誤的。所以應該在執行了一段時間後(業務週期)再做收集。

業務週期根據實際情況而定。一些表和查詢會每天頻繁使用,但是一些類似報表功能可能是一月甚至一年執行一次,所以,除非必要,不然就讓所有東西一直執行,知道你的業務週期完畢。這樣會得到相對準確的資訊。

執行以下語句:

[sql]view plain

copy

print?

前言:  

眾所周知,索引對效能的提公升有巨大作用。但是這是有代價的,索引需要磁碟空間來存放它的b-tree,並且用於在每次dml執行後更新資訊,所以應該在一定時期內檢查有無無用索引。  

準備工作:  

記住別在重啟伺服器之後進行資訊收集,因為dmo將會清空,而資料會非常不準確甚至是錯誤的。所以應該在執行了一段時間後(業務週期)再做收集。  

業務週期根據實際情況而定。一些表和查詢會每天頻繁使用,但是一些類似報表功能可能是一月甚至一年執行一次,所以,除非必要,不然就讓所有東西一直執行,知道你的業務週期完畢。這樣會得到相對準確的資訊。  

步驟:  

執行以下語句:  

select

ind.index_id ,  

obj.name

astablename ,  

ind.name

asindexname ,  

ind.type_desc ,  

indusage.user_seeks ,  

indusage.user_scans ,  

indusage.user_lookups ,  

indusage.user_updates ,  

indusage.last_system_seek ,  

indusage.last_user_scan ,  

'drop index ['

+ ind.

name

+ '] on ['

+ obj.

name

+ ']'

asdropindexcommand  

from

sys.indexes 

asind  

inner

join

sys.objects 

asobj 

onind.object_id = obj.object_id  

left

join

sys.dm_db_index_usage_stats indusage 

onind.object_id = indusage.object_id  

andind.index_id = indusage.index_id  

where

ind.type_desc <> 

'heap'

andobj.type <> 

's'and

objectproperty(obj.object_id, 

'isusertable'

) = 1  

and( 

isnull

(indusage.user_seeks, 0) = 0  

andisnull

(indusage.user_scans, 0) = 0  

andisnull

(indusage.user_lookups, 0) = 0  

)  order

byobj.

name

,  ind.name

go  

分析:  

為了獲得索引名、索引型別、表名,有必要關聯sys.indexes和sys.objects表。  

通常情況下,當乙個索引被使用了,那麼在sys.dm_db_index_usage_stats上的user_seek、user_scan、或者user_lookup列上會有一些值。如果索引從來未被使用,那麼這些值就為0,也就是沒必要保留。  

擴充資訊:  

在決定索引是否有效時,還需要結合你的專業只是。有些索引之所以沒有統計資料是因為還沒有到使用的週期,或者周期性地重啟了伺服器,在刪除之前,要考慮:  

1、  是否為主鍵或者唯一鍵,因為及時這部分沒有數值,但是它們還是可以很好地保證資料的一致性。  

2、  唯一索引幫助優化器建立更有效的執行計畫,及時這些索引未被使用,但是也提供了資料分布的相關資訊。  

為了獲得索引名、索引型別、表名,有必要關聯sys.indexes和sys.objects表。

通常情況下,當乙個索引被使用了,那麼在sys.dm_db_index_usage_stats上的user_seek、user_scan、或者user_lookup列上會有一些值。如果索引從來未被使用,那麼這些值就為0,也就是沒必要保留。

在決定索引是否有效時,還需要結合你的專業只是。有些索引之所以沒有統計資料是因為還沒有到使用的週期,或者周期性地重啟了伺服器,在刪除之前,要考慮:

1、             是否為主鍵或者唯一鍵,因為及時這部分沒有數值,但是它們還是可以很好地保證資料的一致性。

2、             唯一索引幫助優化器建立更有效的執行計畫,及時這些索引未被使用,但是也提供了資料分布的相關資訊。

原文:

第十章 維護索引(6) 查詢無用索引

眾所周知,索引對效能的提公升有巨大作用。但是這是有代價的,索引需要磁碟空間來存放它的b tree,並且用於在每次dml執行後更新資訊,所以應該在一定時期內檢查有無無用索引。記住別在重啟伺服器之後進行資訊收集,因為dmo將會清空,而資料會非常不準確甚至是錯誤的。所以應該在執行了一段時間後 業務週期 再...

第十章 維護索引(4) 通過重組索引提高效能

原文 第十章 維護索引 4 通過重組索引提高效能 如果碎片程度小於30 建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,並且降低cpu的資源。總得來說,重組會清空當前的b tree,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。為了了解是否有必要重組索引...

第十章 維護索引(4) 通過重組索引提高效能

前言 如果碎片程度小於 建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,並且降低cpu的資源。總得來說,重組會清空當前的b tree,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。準備工作 為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在 以下,...