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

2021-09-02 13:02:15 字數 2529 閱讀 6732

眾所周知,索引對效能的提公升有巨大作用。但是這是有代價的,索引需要磁碟空間來存放它的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,

'dropindex['

+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_statsindusage

onind.object_id=indusage.object_id

andind.index_id=indusage.index_id

where

ind.type_desc<>

'heap'

andobj.type<>

's'

andobjectproperty(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,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。準備工作 為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在 以下,...