索引是提高SQL Server性能的關(guān)鍵。也許你已經(jīng)接手了一個(gè)新的SQL Server,它是其他部門的或者你的公司渴望提高當(dāng)前SQL Server性能的。無(wú)論怎么樣,我們要完成的首要任務(wù)之一是看那些沒(méi)有包含索引的表是否存在。
你打開(kāi)兩個(gè)系統(tǒng)表:sysindexes and sysobjects,查找這些信息。這系統(tǒng)表sysobjects是用來(lái)查找表對(duì)象和獲得表對(duì)象名的。sysobjects 表Xtype列有一個(gè)’U’區(qū)別用戶表。sysobjects 表的Id列是用來(lái)作為OBJECTPROPERTY()系統(tǒng)函數(shù)的參數(shù),去查找沒(méi)有索引的表的。第二個(gè)參數(shù)有TableHasIndex的值。是個(gè)系統(tǒng)函數(shù)如果返回0,這表示表沒(méi)有索引存在。其他系統(tǒng)表,sysindexes 是用來(lái)取得表的行數(shù)的。Sysindexes系統(tǒng)表有一個(gè)indid的列,當(dāng)indid的值為0時(shí),表示它他是表而不是索引。Sysindexes表用來(lái)獲得表的行的每一列的值。表的行越多,表的訪問(wèn)頻率越高決定了為表加上索引提高性能的優(yōu)先權(quán)。
下面的查詢是用來(lái)查找沒(méi)有索引的表的:
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
通過(guò)使用同樣的查詢,你可以用TableHasClusteredIndex替代TableHasIndex屬性來(lái)查找那些沒(méi)有索引簇的表。
你打開(kāi)兩個(gè)系統(tǒng)表:sysindexes and sysobjects,查找這些信息。這系統(tǒng)表sysobjects是用來(lái)查找表對(duì)象和獲得表對(duì)象名的。sysobjects 表Xtype列有一個(gè)’U’區(qū)別用戶表。sysobjects 表的Id列是用來(lái)作為OBJECTPROPERTY()系統(tǒng)函數(shù)的參數(shù),去查找沒(méi)有索引的表的。第二個(gè)參數(shù)有TableHasIndex的值。是個(gè)系統(tǒng)函數(shù)如果返回0,這表示表沒(méi)有索引存在。其他系統(tǒng)表,sysindexes 是用來(lái)取得表的行數(shù)的。Sysindexes系統(tǒng)表有一個(gè)indid的列,當(dāng)indid的值為0時(shí),表示它他是表而不是索引。Sysindexes表用來(lái)獲得表的行的每一列的值。表的行越多,表的訪問(wèn)頻率越高決定了為表加上索引提高性能的優(yōu)先權(quán)。
下面的查詢是用來(lái)查找沒(méi)有索引的表的:
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
通過(guò)使用同樣的查詢,你可以用TableHasClusteredIndex替代TableHasIndex屬性來(lái)查找那些沒(méi)有索引簇的表。

