程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> Unused Index Script腳本的幾個問題

Unused Index Script腳本的幾個問題

編輯:關於SqlServer

以前使用過網上下載的腳本查詢沒有使用過的Index比如SQL SERVER – 2008 – Unused Index Script – Download,其實現在看起來這個腳本是有一些問題。

腳本如下:

-- UnusedIndex Script

-- Original Author:Pinal Dave (C) 2011

SELECTTOP 25

o.name AS ObjectName

, i.nameAS IndexName

, i.index_idAS IndexID

, dm_ius.user_seeksAS UserSeek

, dm_ius.user_scansAS UserScans

, dm_ius.user_lookupsAS UserLookups

, dm_ius.user_updatesAS UserUpdates

, p.TableRows

,'DROP INDEX '+QUOTENAME(i.name)

+' ON '+QUOTENAME(s.name)+'.'+QUOTENAME(OBJECT_NAME(dm_ius.OBJECT_ID))AS'drop statement'

FROMsys.dm_db_index_usage_statsdm_ius

INNERJOINsys.indexes iON i.index_id= dm_ius.index_idAND dm_ius.OBJECT_ID= i.OBJECT_ID

INNERJOINsys.objects oON dm_ius.OBJECT_ID= o.OBJECT_ID

INNERJOINsys.schemas sON o.schema_id= s.schema_id

INNERJOIN(SELECTSUM(p.rows) TableRows, p.index_id, p.OBJECT_ID

FROMsys.partitions pGROUPBY p.index_id, p.OBJECT_ID) p

ON p.index_id= dm_ius.index_idAND dm_ius.OBJECT_ID= p.OBJECT_ID

WHEREOBJECTPROPERTY(dm_ius.OBJECT_ID,'IsUserTable')= 1

AND dm_ius.database_id=DB_ID()

AND i.type_desc='nonclustered'

AND i.is_primary_key= 0

AND i.is_unique_constraint= 0

ORDERBY(dm_ius.user_seeks+ dm_ius.user_scans+ dm_ius.user_lookups)ASC

GO

本腳本通過查詢sys.dm_db_index_usage_stats獲得索引的使用情況。但是如果索引沒有被使用是不會出現在sys.dm_db_index_usage_stats中的。只有索引被第一次被使用才會在sys.dm_db_index_usage_stats中插入一條記錄,之後索引被訪問的信息會累積更新到這張表裡。如果使用INNSER JOIN連接就忽略掉了這部分的數據。

當然索引被創建一次都沒有使用的情況會非常少。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved