查找沒有索引的表

字號(hào):

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