У меня есть таблица с примерно 400 миллионами строк. Эта таблица включает набор столбцов bit
с именем IsModified, IsDeleted и IsExpired.Почему добавление нулевого ограничения по умолчанию к существующему столбцу занимает так много времени?
CREATE TABLE [dbo].[ActivityAccumulator](
[ActivityAccumulator_SK] [int] IDENTITY(1,1) NOT NULL,
[ActivityAccumulatorPK1] [int] NULL,
[UserPK1] [int] NULL,
[Data] [varchar](510) NULL,
[CoursePK1] [int] NULL,
[TimeStamp] [datetime] NULL,
[SessionID] [int] NULL,
[Status] [varchar](50) NULL,
[EventType] [varchar](40) NULL,
[DWCreated] [datetime] NULL,
[DWModified] [datetime] NULL,
[IsModified] [bit] NULL,
[DWDeleted] [datetime] NULL,
[IsDeleted] [bit] NULL,
[ActivityAccumulatorKey] [bigint] NULL,
[ContentPK1] [bigint] NULL
) ON [PRIMARY]
Я хотел бы добавить ограничение по умолчанию в таблицу, что для всех будущих вставлено строк, по умолчанию этих битовых столбцов 0. Я пытаюсь сделать это с помощью следующей команды:
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsExpired DEFAULT (0) FOR IsExpired
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsDeleted DEFAULT (0) FOR IsDeleted
ALTER TABLE ActivityAccumulator
ADD CONSTRAINT DF_ActivityAccumulatorIsModified DEFAULT (0) FOR IsModified
В конечном итоге я хотел бы вернуться и очистить существующие данные, чтобы поместить нулевое значение там, где есть значения NULL
, но мне действительно не нужно это делать прямо сейчас.
Просто попытка запустить команду ADD CONSTRAINT
выполняется уже более часа. Учитывая, что я не пытаюсь изменить какие-либо существующие ценности, почему это так долго?
Да, для таких вопросов моя первая мысль также «тупиковая». – Ellesedil
@Dan, +25 не кажется достаточно ... спасибо! Это точно описывает проблему. Ранее отмененный запрос все еще работает с состоянием KILLED/ROLLBACK.Я был настолько сосредоточен на размере рассматриваемой таблицы, что я даже не рассматривал проверку блокирующих процессов. – AHiggins
Размер не совсем неуместен: если бы это был крошечный стол, то ROLLBACK не занимал бы столько времени. – Dan