Синхронизировать локальную базу данных с внешним API - PullRequest
0 голосов
/ 21 апреля 2011

У меня есть таблица, содержащая около 500 000 строк.Раз в день я буду пытаться синхронизировать эту таблицу с внешним API.В большинстве случаев с момента последнего обновления было мало изменений или их вообще не было.Мой вопрос в основном, как я должен построить мой запрос MySQL для лучшей производительности?Я думал об использовании вставки игнорировать, но это не лучший способ, так как будет вставлено только несколько строк, и MySQL должен перебрать все строки в таблице.Я также думал об использовании LOAD_DATA_INFILE, чтобы вставить все строки во временную таблицу, а затем выбрать строки, которых еще нет в моей исходной таблице, а затем удалить временную таблицу.Может быть, у кого-то еще есть лучшее предложение?

Заранее спасибо!

1 Ответ

0 голосов
/ 21 апреля 2011

Я обычно использую временную таблицу и 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 присваивает одной и той же комбинации ключевое слово / тип соответствия один и тот же идентификатор, если он существует в нескольких группах объявлений.

...