Как вы проверяете наличие записи в вашей таблице базы данных?Скорее всего, вы сравниваете его с локальным идентификатором или чем-то подобным.
Если это так, то я бы запросил таблицу и выбрал все идентификаторы, сохранив их в Hashtable (Dictionary
в .Net).(Это может быть непрактично, если ваша база данных содержит миллионы записей).Чтобы определить, существует ли запись в таблице сейчас, достаточно просто проверить, существует ли ключ в словаре, что является операцией O (log n) и поэтому намного лучше, чем O (n) дорогостоящие обходы базы данных.
Следующее, о чем нужно подумать, это как запомнить записи, которые нужно добавить в таблицу.Это зависит от того, есть ли у вас локальные дубликаты записей, которые вы хотите проверить, должны ли они быть добавлены или гарантированно не содержат (локальных) дубликатов.
В простом случае, когда нет возможных дубликатов, просто добавьте их в словарь по соответствующему ключу, а затем выполните запрос Dictionary.Values
, который равен O (1), вероятно, так же быстро, как и получится.Если вам нужно, чтобы вставки были действительно быстрыми, потому что они массивные, рассмотрите возможность использования SQL Bulk Inserts.
Если ваша таблица слишком велика для локального кэширования Id, я бы рассмотрел реализацию хранимой процедуры для вставкии иметь логику, которая решает, действительно ли выполнить вставку или просто ничего не делать там.Это избавит от второго обхода, который обычно довольно дорогой.
Если ваша СУБД реализует команду SQL Merge (при условии, что вы используете MS SQL Server, это так), я бывставьте все данные во временную таблицу, а затем объедините ее с целевой таблицей.Это, вероятно, самое быстрое решение.