索引是 SQL Server 效能調校的核心。接手新環境或進行效能檢核時,首要任務之一即是識別缺乏索引的資料表,特別是資料量大、存取頻繁的表格。
sysobjects:篩選使用者資料表(xtype = 'U'),取得物件 ID 與名稱。OBJECTPROPERTY(id, 'TableHasIndex'):回傳 0 表示該表無任何索引。sysindexes:配合 indid = 0 取得資料列數(heap 資料列數),作為優先序參考——資料列越多、存取越頻繁,建立索引效益越大。SELECT
(SELECT si.rows
FROM sysindexes si
WHERE si.id = so.id AND si.indid = 0) AS rows,
so.name
FROM sysobjects so
WHERE so.xtype = 'U'
AND OBJECTPROPERTY(so.id, 'TableHasIndex') = 0
ORDER BY 1 DESC;
將 TableHasIndex 改為 TableHasClusteredIndex 即可查詢缺乏叢集索引的資料表,進一步評估是否需建立叢集索引以改善範圍查詢效能。
此查詢可快速產出「無索引表格清單」,配合資料列數排序,協助 DBA 優先處理高效益索引建立工作,是資料庫效能基線檢核的必備工具腳本。