[英]sys.dm_db_index_physical_stats shows I have 3 PK indexes after rebuild
我正在使用以下查詢檢查我的數據庫的一個表中的索引中的碎片
SELECT a.object_id, object_name(a.object_id) AS TableName,
a.index_id, name AS IndedxName, avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats
(DB_ID (N'prod-db')
, OBJECT_ID(N'[dbo].[Channel]')
, NULL
, NULL
, NULL) AS a
INNER JOIN sys.indexes AS b
ON a.object_id = b.object_id
AND a.index_id = b.index_id;
GO
並發現它列出PK_Channel
3 次,
表名 | index_id | 索引名稱 | object_id | avg_fragmentation_in_percent |
---|---|---|---|---|
渠道 | 1 | PK_頻道 | 1557580587 | 0,01 |
渠道 | 1 | PK_頻道 | 1557580587 | 0 |
渠道 | 1 | PK_頻道 | 1557580587 | 0 |
渠道 | 3 | idx_Channel_RegisteredTime | 1557580587 | 0,0429737859905458 |
我已經重建了索引 2 次,所以它與此不謀而合。 但這是一件好事嗎? 或者這是正常的(也就是預期的行為)? 我應該“解決”這個問題嗎? 如果是這樣,怎么做?
值得注意的是,索引idx_Channel_RegisteredTime
重建了一次,在sys.dm_db_index_physical_stats
中沒有發現重復。 任何人都可以闡明這一點嗎?
另請注意,當我在 Management Studio 中列出索引時,它只顯示PK_Channel
一次,這是我所期望的。
萬一它有什么不同或有人好奇,我使用以下語句重建了索引
ALTER INDEX PK_Channel ON [dbo].[Channel]
REBUILD
;
ALTER INDEX idx_Channel_RegisteredTime ON [dbo].[Channel]
REBUILD
;
謝謝
您只有一個索引,在 B 樹中有多個級別。
來自sys.dm_db_index_physical_stats
的文檔:
對於索引,每個分區中的 B 樹的每個級別都返回一行。
這意味着dm_db_index_physical_stats
將為 B 樹的每個級別返回一行。 您正在將其加入到sys.indexes
的單行中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.