Как добавить только уникальные записи в базу данных в масштабируемом режиме - PullRequest
2 голосов
/ 28 июля 2010

Я хочу добавить только уникальные записи в таблицу базы данных. Есть ли способ сделать это без необходимости выбора, чтобы увидеть, существует ли текущая запись, потому что это будет занимать очень много времени по мере роста таблицы. Я открыт для всех типов предложений (если они существуют).

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

Я использую MySQL и Java.

Ответы [ 4 ]

3 голосов
/ 28 июля 2010

Самый простой способ - обеспечить уникальность базы данных (скорее всего, подойдет уникальный набор ключей для индекса), поэтому любые дубликаты будут отклонены. Ваш код должен игнорировать сообщения об отклонении.

1 голос
/ 28 июля 2010

Есть две возможности.

  1. Предположим, это не дубликат, поэтому выполните INSERT и справитесь с ошибкой, выполнив ОБНОВЛЕНИЕ.
  2. Предположим, что это дубликат, поэтому выполните ОБНОВЛЕНИЕ и справьтесь с ошибкой, вставив.

Что лучше, зависит от относительной вероятности.

1 голос
/ 28 июля 2010

Вы можете загрузить данные в таблицу tmp, затем из этой таблицы вы можете загрузить все результаты, где tmp.id! = Id, и после этого усечь tmp.

Если транзакция вставки не так важна, вы можете создать уникальное ограничение.

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

1 голос
/ 28 июля 2010

Кто-то должен будет выполнить проверку, если только вы не можете сделать вывод из данных, если они были сохранены ранее или нет, если это возможно, зависит от данных и варианта использования.

Учитывая, что кому-то придетсявсе равно сделайте проверку, почему бы не позволить базе данных проверить ее для вас?Он проверит свой уникальный индекс (у вас действительно есть уникальный индекс, и он применяется принудительно, верно?) И вернет ошибку, если запись уже существует.

IOW, просто попробуйте вставить и перехватить любую полученную ошибку, еслиошибка является ошибкой дубликата ключа, пропустите запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...