由于您已经知道怀疑有分片的表,您可以使用下面的T-SQL语句来识别分片。
要获取数据库的数据库 ID:
select name , database_id
from sys.databases
where name = 'Database_Name'
在表所属的数据库下运行这些查询。
获取表的对象ID:
select * from sys.objects where name = 'Table_name'
查找表中的碎片百分比:
select TableName=object_name(dm.object_id)
,IndexName=i.name
,IndexType=dm.index_type_desc
,[%Fragmented]=avg_fragmentation_in_percent ,dm.fragment_count ,dm.page_count ,dm.avg_fragment_size_in_pages
,dm.record_count ,dm.avg_page_space_used_in_percent from
sys.dm_db_index_physical_stats(14,420770742,null,null,'SAMPLED') dm
--Here 14 is the Database ID
--And 420770742 is the Object ID of the table
join sys.indexes i on dm.object_id=i.object_id and
dm.index_id=i.index_id order by avg_fragmentation_in_percent desc
如果索引的碎片超过 20%,那么我们可以尝试重建该索引:
ALTER INDEX Index_Name
ON [Database_name].[Table_Name] REBUILD
OR - 重建表中的所有索引
ALTER INDEX ALL ON [Database_name].[Table_Name]
REBUILD WITH (FILLFACTOR = 80)
或 - 使用 DBCC DBREINDEX
DBCC DBREINDEX ('[Database_name].[ Table_Name]')
DBCC DBREINDEX ('[Database_name].[ Table _Name]',
'Index_Name, 85)
如果碎片计数低于 20%,您可以取消索引重建或 ReOrg.. 而只是更新该索引/表的统计信息。
使用 FULLSCAN 对表运行更新统计信息:
UPDATE STATISTICS [Database_Name].[Table_Name]
with FULLSCAN
更新索引的统计信息
UPDATE STATISTICS [Database_Name].[Table_Name] Index_Name
with FULLSCAN
我已将这些作为单独的查询提供给您,以便您更好地了解正在执行的操作。希望这会有所帮助