SQL Server 2008: INSERT, если нет, сохранить уникальный столбец - PullRequest
1 голос
/ 12 сентября 2010

Я использую SQL Server 2008.

У меня есть столбец NVARCHAR(MAX) в таблице, который я хочу убедиться, что он уникален. Таблица содержит 600 000 записей и увеличивается каждый день на 50 000 записей.

В настоящее время перед добавлением элемента в таблицу я проверяю, существует ли он в таблице, и если нет, то вставляю его.

IF NOT EXISTS (SELECT * FROM Softs Where Title = 'example example example.')
BEGIN
INSERT INTO Softs (....)
VALUES (...)
END

У меня нет индекса в столбце Заголовок

Недавно я начал получать тайм-ауты при вставке элементов в таблицу.

Каким будет правильный способ поддержания уникальности?

Если это действительно поможет, я могу изменить NVARCHAR (MAX) на NVARCHAR (450)

1 Ответ

6 голосов
/ 12 сентября 2010

Безумно не иметь индекс.

Это помогло бы, но длина ключа индекса может составлять только 900 байт.

Однако, вероятно, у вас уже есть дубликаты, потому что вероятность того, что 2-й EXISTS будет выполнен после 1-го EXISTS, но до 1-го INSERT.

Создание индекса сообщит вам и впоследствии защитит отthis.

Однако вы можете получить ошибки при большой нагрузке.

Мой любимый подход для больших вставок / низких дубликатов - это шаблон JFDI.Сильно параллельный

BEGIN TRY
   INSERT etc
END TRY
BEGIN CATCH
    IF ERROR_NUMBER() <> 2627
      RAISERROR etc
END CATCH
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...