眾所周知,索引對效能的提公升有巨大作用。但是這是有代價的,索引需要磁碟空間來存放它的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,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。準備工作 為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在 以下,...