Создал HL-инфоблок. Среди полей указал UF_CODE и через phpMyAdmin сделал его уникальным индексом, что бы не дублировались записи с одинаковым кодом.
При выполнении add на уже существующую запись Apache падает ошибкой MySQL сообщающей о дублирующемся значении ключа:
И скрипт останавливается. То есть даже до проверки isSuccess не доходит.
Проверяю перед добавлением существование записи следующим образом:
Но выполнение этого участка кода занимает около 0,02 секунды. На 50 000 записей это уже 16+ минут. Учитывая, что без проверки (зная заранее, что таких записей в таблице нет) это же количество записей залетает чуть более минуты, то это существенная потеря времени.
Что можно сделать? Как ускорить этот участок с проверкой дубликатов?
-----
P.S. Созвонился со знакомым гуру-php предложил сделать буфер символьных кодов, выбрав их все одним запросом и сохранив в массиве PHP, а затем уже проверять записи по этому массиву. Надо будет попробовать, посмотрим каким будет прирост производительности!
При выполнении add на уже существующую запись Apache падает ошибкой MySQL сообщающей о дублирующемся значении ключа:
Код |
---|
Mysql query error: Duplicate entry '02-125' for key 'UF_CODE' (400) |
Проверяю перед добавлением существование записи следующим образом:
Код |
---|
$rsProdInDB = $entity_data_class::getList(array( "select" => Array('UF_CODE'), "filter" => Array('UF_CODE' => $arDataHBlock["UF_CODE"]), "limit" => 1 )); if($arProdInDB = $rsProdInDB->Fetch()) { // Такая запись уже есть, обновим её... |
Но выполнение этого участка кода занимает около 0,02 секунды. На 50 000 записей это уже 16+ минут. Учитывая, что без проверки (зная заранее, что таких записей в таблице нет) это же количество записей залетает чуть более минуты, то это существенная потеря времени.
Что можно сделать? Как ускорить этот участок с проверкой дубликатов?
-----
P.S. Созвонился со знакомым гуру-php предложил сделать буфер символьных кодов, выбрав их все одним запросом и сохранив в массиве PHP, а затем уже проверять записи по этому массиву. Надо будет попробовать, посмотрим каким будет прирост производительности!
postoev.ru/blog/