2013-03-16 68 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