Лучший способ проверить, если данные уже существуют и вставить - PullRequest
2 голосов
/ 22 августа 2011

Привет всем У меня есть следующий скрипт SQL Server 2008, который проверит, существует ли строка в Table A и не вставляет ли данные из Table B.

Это работало хорошо, пока Table A не начал заполняться большим количеством данных. В настоящее время в этой таблице 30 миллионов строк, и эта цифра будет расти до прогнозируемых 70 миллионов строк.

Проблема, если это занимает слишком много времени и влияет на другие процессы. Просто интересно, есть ли лучший способ проверить, существует ли уже строка в таблице. Просто добавьте, что все это делается с помощью служб SSIS.

Сценарий:

INSERT INTO TABLE A ([recordID],Field 1, Field2, Field 3, Field 4, Field 5) 
    SELECT 
        [TABLE B].[recordID],[TABLE B].[Field 1], [TABLE B].[Field2], 
        [TABLE B].[Field 3], [TABLE B].[Field 4], [TABLE B].[Field 5] 
    FROM TABLE B AS TABLE B 
    LEFT OUTER JOIN TABLE A AS TABLE A ON [TABLE B].[recordID] = [TABLE A].[recordID] 
    WHERE [TABLE A].[recordID] IS NULL

Ответы [ 3 ]

3 голосов
/ 22 августа 2011

Не уверен, что это будет быстрее, но стоит попробовать:

INSERT INTO TABLE A ([recordID],Field 1, Field2, Field 3, Field 4, Field 5)

SELECT [TABLE B].[recordID],[TABLE B].[Field 1], [TABLE B].[Field2], [TABLE B].[Field 3], [TABLE B].[Field 4], [TABLE B].[Field 5] 
FROM TABLE B 
where b.recordID not in 
     (select recordID from A)
3 голосов
/ 22 августа 2011

Вы можете проверить команду слияния:

http://technet.microsoft.com/en-us/library/bb510625.aspx

0 голосов
/ 24 августа 2011
  1. Если это кластеризованный индекс, а недавно добавленный RecordId не является инкрементным, то ожидается, что будет разлито много страниц. Убедитесь, что вы установили оптимальный коэффициент заполнения.
  2. Найдите, какая операция занимает время, тогда к ней будет просто обратиться. Если поиск занимает много времени или вставка занимает много времени?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...