Проверка на дублирование в базе.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Проверка на дублирование в базе.

Сообщение PartyPoison »

Есть csv файл размером в 90000+ строк (уникальных идентификаторов у них нет).

При парсинге проверяю наличее строки в базе таким образом (что бы небыло дубляжей при повторном парсинге файла)

Код: Выделить всё

if (!Crosses::find()->where(['article' => $record[0], 'cross_article' => $record[2]])->one())
По наполнению таблицы записями из файла парсинг существенно замедляется так как идет проверка с записями которые были добавлены.

Можно ли как либо оптимизировать данную проверку на дублирование без уникальных индексов? Так как в csv файл у заказчика добавить нет возможности дополнительную колонку с уникальным значением.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: Проверка на дублирование в базе.

Сообщение S c »

так добавьте ключи, и используйте INSERT IGNORE к примеру
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Проверка на дублирование в базе.

Сообщение PartyPoison »

S c писал(а): 2017.09.15, 14:17 так добавьте ключи, и используйте INSERT IGNORE к примеру
Ключи к чему ? Каких либо уникальных значений в записи файла нету. Если бы все было так просто)
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: Проверка на дублирование в базе.

Сообщение S c »

Код: Выделить всё

->where(['article' => $record[0], 'cross_article' => $record[2]])->one()
или все же есть?
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Проверка на дублирование в базе.

Сообщение PartyPoison »

S c писал(а): 2017.09.15, 14:29

Код: Выделить всё

->where(['article' => $record[0], 'cross_article' => $record[2]])->one()
или все же есть?
Вы думаете я просто так проверяю сразу 2 значения ? Они могут быть следующего вида (условно):

article cross_article
11111111 222222222
11111111 333333333
22222222 333333333
22222222 333333333

красный в моем случаи не уникальный

В данном случаи они все уникальны но unique здесь не подойдут или я чего то не знаю)
Последний раз редактировалось PartyPoison 2017.09.15, 14:37, всего редактировалось 1 раз.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Проверка на дублирование в базе.

Сообщение someweb »

Уникальный ключ может быть составным - по нескольким полям.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Аватара пользователя
PartyPoison
Сообщения: 69
Зарегистрирован: 2017.04.27, 11:04

Re: Проверка на дублирование в базе.

Сообщение PartyPoison »

someweb писал(а): 2017.09.15, 14:36 Уникальный ключ может быть составным - по нескольким полям.
Посмотрю эту тему. Спасибо.
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: Проверка на дублирование в базе.

Сообщение S c »

как ответили выше - составной unique по 2м полям и insert ignore, проблема решена
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Проверка на дублирование в базе.

Сообщение chesar »

Парсить пачку строк.
Выбрать дубликаты.
Отфильтровать.
Вставить оставшиеся.
Ответить