2011-09-27 63 views
0

我正在更新的表上有幾個約束(默認值爲列的值)。更新非常慢,我想知道是否可能是約束錯誤?SQL約束會導致緩慢嗎?

有問題的約束條件是:

ALTER TABLE [dbo].[OrderCustomers] ADD CONSTRAINT [DF_OrderCustomers_AmountTotal] DEFAULT ((0.00)) FOR [AmountTotal] 

UPDATE語句只是改變了幾列,其中的一個是在上面的約束和一些其他列沒有對他們FKS列。

僅供參考:我禁用所有觸發器來隔離問題。

+1

您能提供關於約束的定義以及更新語句本身的一些細節。 –

+1

SQL性能就像天氣一樣 - 大約有十億個因素參與其中,並且不可能在沒有大量信息的情況下提供任何見解。你基本上是問「因爲風而在這裏很熱?」 – JNK

+0

列上的默認值?不太可能,除非該默認值的計算很昂貴。我們能看到約束嗎? –

回答

5

這是非常不可能的一個列的默認約束甚至會引人注目。有太多東西可能導致更新緩慢。不過,我看到的第一個地方是正在更新的表上的任何觸發器。這可能會導致一系列性能問題。

診斷此問題的最佳方法之一是啓動SQL事件探查器,並在執行更新時查看SQL Server上發生了什麼。你可能會對發生的事情感到驚訝。

+0

+1有膽量回答這麼一個問題,但有很大的可能性正確的問題。我喜歡當**我**這樣做,希望我再次做到了:) –

+0

+1幾乎肯定是正確的。只有極小的可能性,默認值會減慢任何速度。但是,如果某人決定放置一個「等待3秒鐘」(我認真)或者「從我的表格中選擇」,但不要在觸發器中打擾索引,那麼這將是原因。 – Ben

4

除非你編碼得非常糟糕,否則不會。

糟糕的是,我的意思是像UDF這樣的東西來訪問一個表來生成一個值。或者在觸發器中發送電子郵件RBAR。

緩慢的寫入可能會導致很多事情。我懷疑約束。請參閱Why does an UPDATE take much longer than a SELECT?