Использование MySQL INSERT IGNORE для предотвращения дублирования записей (проблемы с производительностью?) - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть таблица, в которой сохраняются измерения датчика.Строка содержит значение измерения, идентификатор (pk и автоинкремент) и случайное число = num (длиной около 10 цифр или даже больше).

CREATE TABLE `table` (
    `id` int(10) UNSIGNED NOT NULL,
    `value` float NOT NULL,
    `num` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

Мой вопрос : моей системе требуется, чтобыслучайное число является уникальным (два или более измерений / строк с одним и тем же случайным числом не допускаются).Сейчас я провел небольшое исследование, и есть аккуратное утверждение INSERT IGNORE .Но я не уверен, разумно ли использовать его в моем случае, так как через некоторое время может быть много строк, и проверка всех строк в таблице на случайное число и совпадение с тем, которое должно быть добавлено заново, может бытьчерез какое-то время излишне и сильно повлияет на производительность?

Есть мысли?

1 Ответ

0 голосов
/ 18 февраля 2019

Используйте команду INSERT IGNORE, а не команду INSERT.Если запись не дублирует существующую запись, MySQL вставляет ее как обычно.Если запись является дубликатом, то ключевое слово IGNORE говорит MySQL, что нужно отбросить ее без предупреждения.А также используйте уникальные ограничения UNIQUE для столбца Случайное число.Для повышения производительности при попытке извлечь данные из таблицы создайте для этого INDEX.

https://www.w3schools.com/sql/sql_create_index.asp

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