1

我有一个具有以下架构的表...

CREATE TABLE [dbo].[Object1](
[id] [bigint] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[Column1] [datetime] NOT NULL,
[Column2] [int] NOT NULL,
[Column4] [char](4) NOT NULL,
[Column5] [money] NOT NULL,
[Column6] [bigint] NOT NULL,
[Column7] [char](6) NOT NULL,
[Column3] [bit] NOT NULL,
[Column8] [bigint] NULL,
CONSTRAINT [pk_Object1] PRIMARY KEY NONCLUSTERED 
([id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF
, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)) 
GO
ALTER TABLE [dbo].[Object1] ADD  CONSTRAINT [DF_Object1_Column1]  DEFAULT (getutcdate()) FOR [Column1]
GO
ALTER TABLE [dbo].[Object1] ADD  CONSTRAINT [DF_Object1_Column3]  DEFAULT ((0))     FOR [Column3]
GO

每天晚上,都会针对该表运行一个删除查询...

delete from Object1 
where ( Column1 < DATEADD(dd, -40, GETUTCDATE()) )
OR ( Column3 = ? and Column1 < DATEADD(dd, -3, GETUTCDATE()))

表有

  1. Index2 (id) - 聚集的,位于 PRIMARY 上的唯一
  2. Index3 (id) - 位于 PRIMARY 上的非集群
  3. Index1 (id) - 位于 PRIMARY 上的非聚集、唯一的主键
  4. Index4 (Column7) - 位于 PRIMARY 上的非聚集
  5. Index5 (Column2, Column7, Column4, Column5) - 位于 PRIMARY 上的非聚集

该查询产生以下计划...

删除语句的执行计划

该语句导致高度并发表中的阻塞。阻塞会导致系统错误。

如果我重新创建“Object1_IX”以覆盖“Object1”字段,这仍然会发生。这张桌子有 6,568,449 行,每晚修剪约 200,000 行。

4

0 回答 0