Я обычно использую временную таблицу и LOAD DATA INFILE
массовый загрузчик.Массовый загрузчик гораздо эффективнее, чем попытка вставить записи с помощью динамически создаваемого запроса.
Если вы индексируете свои постоянные таблицы с соответствующими уникальными ключами, которые относятся к ключам в API, тогда вы должны найти INSERT
и UPDATE
операторы работают довольно быстро.Ниже приведен пример типа запроса INSERT
, который я использую:
INSERT INTO keywords(api_adgroup_id, api_keyword_id, keyword_text, match_type, status)
SELECT a.api_id, a.keyword_text, a.match_type, a.status
FROM tmp_keywords a LEFT JOIN keywords b ON a.api_adgroup_id = b.api_adgroup_id AND a.api_keyword_id = b.api_keyword_id
WHERE b.api_keyword_id IS NULL
В этом примере я выполняю OUTER JOIN
для таблицы keywords
, чтобы проверить, существует ли она уже.Вставляются только новые строки во временной таблице, где в основной таблице нет совпадений (api_keyword_id
в таблице keywords
- NULL
).
Также обратите внимание, что в этом примере Iнеобходимо использовать как идентификатор группы объявлений, так и идентификатор ключевого слова, чтобы однозначно идентифицировать ключевое слово, поскольку API AdWords присваивает одной и той же комбинации ключевое слово / тип соответствия один и тот же идентификатор, если он существует в нескольких группах объявлений.