我使用SQL Server 2012,并在我的数据库中有一个表,其中有10行,通常在sql server profiler中没有查询。但是当我使用dm_db_index_usage_stats
作为索引的调查用途时,此表的主键索引高度为user_update
和user_seek
。SQL服务器索引使用率很高
我不知道为什么这个指数有较高的更新和寻求。
此未使用表的平均更新每分钟大约有1000次更新。
编辑
此表没有与另一个表的任何外键,并没有任何相关性。
我认为这个问题是sql server中的一个bug。
EDIT 2
当我删除并重新创建该表并重新插入其上的数据,该表的索引使用并没有改变。
我想也许存在一些像这张表一样的表(没有用法并且有索引更新和索引查找)。
编辑3
我写的这个表更新后触发,并更新记录保存到另一个表(JohnLBevan suggest
)但不插入新表中的任何记录,这意味着这触发唐不会跑。但索引user_seek和索引user_update仍然会更改。我坚信这个问题是SQL Server中的一个错误。但我不知道这些更新和寻求对性能有效。
编辑4
我用下面的代码来获得使用索引:
SELECT *
From
(SELECT DB_NAME(ddius.database_id)AS DatabaseName, OBJECT_NAME(ddius.object_id) AS object_name ,
CASE
WHEN (SUM(user_updates + user_seeks + user_scans + user_lookups) = 0)
THEN NULL
ELSE (CAST(SUM(user_seeks + user_scans + user_lookups) AS DECIMAL)
/CAST(SUM(user_updates + user_seeks + user_scans
+ user_lookups) AS DECIMAL))
END AS RatioOfReads ,
CASE
WHEN (SUM(user_updates + user_seeks + user_scans + user_lookups) = 0)
THEN NULL
ELSE (CAST(SUM(user_updates) AS DECIMAL)
/CAST(SUM(user_updates + user_seeks + user_scans
+ user_lookups) AS DECIMAL))
END AS RatioOfWrites ,
SUM(user_updates + user_seeks + user_scans + user_lookups)
AS TotalReadOperations ,
SUM(user_updates) AS TotalWriteOperations
FROM sys.dm_db_index_usage_stats AS ddius
JOIN sys.indexes AS i ON ddius.object_id = i.object_id
AND ddius.index_id = i.index_id
WHERE i.type_desc IN ('CLUSTERED', 'HEAP') --only works in Current db
GROUP BY ddius.database_id,ddius.object_id) Z
ORDER BY TotalWriteOperations desc --OBJECT_NAME(ddius.object_id)
这个问题似乎是题外话,因为它缺乏足够的相关信息 –
不再使用的表没有更新。 –
未使用的表必须不被更新。但是这个表有很高的更新没有用处。 –