Удалить заявление не использует индекс
У меня есть таблица со следующей схемой...
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()))
Стол имеет
- Index2 (id) - кластеризованный, уникальный, расположенный на ПЕРВИЧНОМ
- Index3 (id) - некластеризованный, расположенный на PRIMARY
- Index1 (id) - некластеризованный, уникальный первичный ключ, расположенный на PRIMARY
- Index4 (Column7) - некластеризованный, расположенный на PRIMARY
- Index5 (Столбец2, Столбец7, Столбец4, Столбец5) - некластеризованный, расположенный на ПЕРВИЧНОМ
Запрос производит следующий план...
План выполнения для оператора удаления
Оператор вызывает блокировку в очень параллельной таблице. Блокировка рябь в системные ошибки.
Если я воссоздаю "Object1_IX", чтобы закрыть поле "Object1", это все равно происходит. Таблица имеет 6 568 449 строк и уравновешивает около 200000 за ночь.