索引是提高SQL Server性能的關鍵。也許你已經接手了一個新的SQL Server,它是其他部門的或者你的公司渴望提高當前SQL Server性能的。無論怎麼樣,我們要完成的首要任務之一是看那些沒有包含索引的表是否存在。
你打開兩個系統表:sysindexes and sysobjects,查找這些信息。這系統表sysobjects是用來查找表對象和獲得表對象名的。sysobjects 表Xtype列有一個’U’區別用戶表。sysobjects 表的Id列是用來作為OBJECTPROPERTY()系統函數的參數,去查找沒有索引的表的。第二個參數有TableHasIndex的值。是個系統函數如果返回0,這表示表沒有索引存在。其他系統表,sysindexes 是用來取得表的行數的。Sysindexes系統表有一個indid的列,當indid的值為0時,表示它他是表而不是索引。Sysindexes表用來獲得表的行的每一列的值。表的行越多,表的訪問頻率越高決定了為表加上索引提高性能的優先權。
下面的查詢是用來查找沒有索引的表的:
SELECT (SELECT si.rows
FROM sysindexes si
WHERE si.id = so.id and indid = 0) rows
, so.name
FROM sysobjects so
WHERE so.xtype = 'U'
AND OBJECTPROPERTY(so.id , 'TableHasIndex' ) = 0
ORDER BY 1 DESC
通過使用同樣的查詢,你可以用TableHasClusteredIndex替代TableHasIndex屬性來查找那些沒有索引簇的表。