Добавление первичного ключа UNIQUEIDENTIFIER guid в мою существующую таблицу с более чем 1 миллионом записей через flyway заняло почти 2 часа - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно добавить первичный ключ в существующую таблицу, которая содержит почти 1,7 миллиона записей. Когда я сделал это просто с помощью приведенной ниже команды через flyway, весь процесс занял около 2 часов. Если я запускаю запрос непосредственно на БД, это занимает от 30 до 40 минут.

ALTER TABLE [dbo].[presession_areas_of_consent]
    ADD [presession_areas_of_consent_id] [UNIQUEIDENTIFIER] DEFAULT newid() NOT null
GO

Я читаю различные статьи, в которых спор идет о guid и идентификаторе, и я предпочитаю идентификацию, а не guid, если индексация не требуется и записи таблицы будут экспоненциально увеличиваться.
Но остается вопрос, почему серверу требуется 2 часа для создания записей.
Сервер sql и код находятся на одном узле. Добавлено изображение для справки

Любые идеи будут полезны.

enter image description here

Схема таблицы:

CREATE TABLE [dbo].[presession_areas_of_consent](
    [pre_session_id] [varchar](255) NOT NULL,
    [customer_notes] [varchar](5000) NULL,
    [customer_options] [varchar](255) NULL,
    [area_of_consent] [varchar](255) NOT NULL,
    [last_modified_date] [datetime] NOT NULL,
    [created_date] [datetime] NOT NULL,
    [presession_areas_of_consent_id] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PK_presession_areas_of_consent_id] PRIMARY KEY CLUSTERED 
(
    [presession_areas_of_consent_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[presession_areas_of_consent] ADD  CONSTRAINT [PRAC_DF_MODIFIED_AT]  DEFAULT (getutcdate()) FOR [last_modified_date]
GO

ALTER TABLE [dbo].[presession_areas_of_consent] ADD  CONSTRAINT [PSC_DF_CREATED_AT]  DEFAULT (getutcdate()) FOR [created_date]
GO

ALTER TABLE [dbo].[presession_areas_of_consent] ADD  DEFAULT (newid()) FOR [presession_areas_of_consent_id]
GO

ALTER TABLE [dbo].[presession_areas_of_consent]  WITH CHECK ADD  CONSTRAINT [FK_j58lc9x3x6di8f6tcwrib44bj] FOREIGN KEY([pre_session_id])
REFERENCES [dbo].[presession] ([pre_session_id])
GO

ALTER TABLE [dbo].[presession_areas_of_consent] CHECK CONSTRAINT [FK_j58lc9x3x6di8f6tcwrib44bj]
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...