2010-10-26 49 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