Удалить заявление не использует индекс

У меня есть таблица со следующей схемой...

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) - кластеризованный, уникальный, расположенный на ПЕРВИЧНОМ
  2. Index3 (id) - некластеризованный, расположенный на PRIMARY
  3. Index1 (id) - некластеризованный, уникальный первичный ключ, расположенный на PRIMARY
  4. Index4 (Column7) - некластеризованный, расположенный на PRIMARY
  5. Index5 (Столбец2, Столбец7, Столбец4, Столбец5) - некластеризованный, расположенный на ПЕРВИЧНОМ

Запрос производит следующий план...

План выполнения для оператора удаления

Оператор вызывает блокировку в очень параллельной таблице. Блокировка рябь в системные ошибки.

Если я воссоздаю "Object1_IX", чтобы закрыть поле "Object1", это все равно происходит. Таблица имеет 6 568 449 строк и уравновешивает около 200000 за ночь.

0 ответов

Другие вопросы по тегам