簡體   English   中英

sys.dm_db_index_physical_stats 顯示重建后我有 3 個 PK 索引

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM