没有索引或唯一约束的标识列

时间:2012-02-16 08:54:29

标签: sql-server sql-server-2008

我刚刚经历了数据库故障,因为从磁盘上突然发送了异常数据。 我发现当我尝试插入大约一个日志表时会出现问题。 350万行。该表的ID列设置为IDENTITY,但没有索引或唯一约束。

CREATE TABLE [dbo].[IntegrationTestLog](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Ident] [varchar](50) NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar](255) NOT NULL,
    [Level] [varchar](50) NOT NULL,
    [Logger] [varchar](255) NOT NULL,
    [Message] [varchar](max) NOT NULL,
    [Exception] [varchar](max) NULL
)

此行触发的问题:

INSERT INTO IntegrationTestLog ([Ident],[Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@Ident, @log_date, @thread, @log_level, @logger, @message, @exception)

可能会有很多其他查询会触发它,但我肯定知道这个。

忍受我,因为我现在只是猜测,但如果索引丢失,身份播种过程会以某种方式减慢吗?是否有任何轻微的机会可以回到MAX(ID)查询来获取最新的条目? (可能不是)。我还没有成功找到有关该主题的任何深层技术信息。如果你知道一些文学或链接,请分享。

为了解决问题,我们最终截断了表格,这本身花了很长时间。我还将ID提升为主键。 然后我读了这篇文章:Identity columns并发现truncate确实触及了身份种子。

  

截断表(但不是删除)会将当前种子更新为   原始种子价值。

......这再一次只让我对身份种子更加怀疑。

我再次在黑暗中寻找 - 如果你有洞察力,请在这个问题上启发我。

0 个答案:

没有答案