2010-10-26 40 views
0

我有一個解決方案,我插入的行使用GUID而不是身份。 Guid是在c#中生成的。身份插入 - 性能

我有另一種解決方案,其中表,索引等是相同的,但不是的GUID我用的身份,讓SQL的服務器生成它們。

在後面的情況下,我得到一個性能問題....想法?

編輯

我真的很對不起!我回到家中安裝了探查器,看到我正在比較蘋果和梨......從我身邊的一個大錯過。我正在調用不同的SQL。現在持續時間大致相同。

+0

嘿丹尼爾,你能證明我們所有人的表現問題是什麼意思嗎?你在插入物上看到的IO速度是多少,每秒插入多少個等。 – 2010-10-26 08:01:32

+0

我知道這個問題有點含糊。我無法訪問正確的代碼。我將在今天晚些時候提供統計數據......對不起! – Daniel 2010-10-26 08:08:47

+0

但是,像父行:1000,子行約爲:10000; Guid解決方案爲0.6秒,身份解決方案爲2.5秒。 – Daniel 2010-10-26 08:10:32

回答

1

我誠實地希望將性能問題與guid作爲身份。當你使用guid時,如果你使用newid()而不是newsequentialid(),你可能會因爲新記錄被插入到表的中間而不是結尾而導致頁面拆分。

0

爲了幫助您解決您的問題,我們首先需要有關您的配置和性能指標的更多信息。

環境:

  • 您運行的是什麼版本的SQL Server?
  • 什麼是CPU和RAM規格?
  • 你的存儲子系統的配置是什麼?
  • 提供表模式的和相關的索引定義。
  • 提供測試代碼,演示如何執行插入操作。

性能:

  • 你插入的時候,你在服務器上看到什麼wait_types即在SQL Server等待什麼資源?你是CPU綁定/磁盤綁定,或者你有頁面爭用。
  • 根據使用Identity Vs GUID運行測試時,wait_types是否有所不同?

最初的假設/猜測:

您可以進行標識插入時,作爲索引的前導列會看到頁面的競爭不斷增加,但競爭的資源將在B樹的最後一頁。

這當然只是一個理論,直到我們有更多的細節從你的工作。

+0

。我會提供統計數據。如果我在降低指數時得到相同的測量結果,理論是否會失敗? – Daniel 2010-10-26 10:27:08