2013-03-16 32 views
1

我在SQL Server 2008 R2中有一个表,主键为Guid类型。经过几天的测试数据库,现在这个表有7000行。SQL Server 2008 R2:使用guid主键更新表时出现超时异常

我有一个查询,当数据约1000条记录的作品,但现在没有。

查询是:

update Ticket 
set AlphaCode = "Hi" 
where TicketId = 'fe0b840d-5688-4f38-a1fe-46eb6ff04296' 

AlphaCode列的数据类型是nvarchar(1024)

上一个查询有时会在大约10秒内运行!但是,很多时候它失败

超时异常

有趣的是,下面的查询返回的记录,在不到一秒钟:

select * 
from Ticket 
where TicketId = 'fe0b840d-5688-4f38-a1fe-46eb6ff04296' 

这意味着, DBMS引擎没有困难找到我的记录,但问题在于更新操作。

+0

也许你在该表上有一个不好的索引需要修复。 – Kalpers 2013-03-17 01:44:29

+0

是主键聚簇索引,以及guid如何生成,并且您是否设想该表超过10k行?碎片整理表并尝试它可能会有所帮助。 – 2013-03-17 04:28:48

+0

Ticket表上是否有触发器?它们在更新中调用(并可能导致一些锁),而不是在select中。 – 2013-03-17 09:59:08

回答

0

你不应该使用Guids作为簇键。如果您发现集群密钥的工作原理以及它如何在磁盘上安排数据,那么您会意识到这些表上的更新和删除操作是多么昂贵。

在此处查看其他问题here