Как ускорить ОБНОВЛЕНИЕ SQL, который также содержит JOIN на 25 миллионов строк - PullRequest
2 голосов
/ 02 июня 2011

запрос, который я бы хотел ускорить (или заменить другим процессом):

UPDATE en_pages, keywords
SET en_pages.keyword = keywords.keyword
WHERE en_pages.keyword_id = keywords.id

Таблица en_pages имеет правильную структуру, но содержит только неуникальные page_ids и keyword_ids. я пытаюсь добавить фактические ключевые слова (строки) в эту таблицу, где они соответствуют keyword_ids. в таблице en_pages содержится 25 миллионов строк, которые необходимо обновить.

Я добавляю ключевые слова, чтобы эту таблицу можно было запрашивать в режиме реального времени и возвращать ключевые слова (соединение, очевидно, слишком медленное для «реального времени»).

мы применяем этот запрос (и некоторые другие) к подразделениям нашего большего набора данных. мы делаем это часто, чтобы создавать пользовательские интерфейсы для определенных подразделов наших данных для разных групп пользователей (извините, если это сбивает с толку).

все это работает нормально, если вы даете ему час на бег, но я пытаюсь ускорить его.

Есть ли лучший способ сделать это, который был бы быстрее, используя php и / или mysql?

Ответы [ 3 ]

2 голосов
/ 02 июня 2011

Я на самом деле не думаю, что вы можете ускорить процесс.

Вы все еще можете добавить брутальную мощь в свою базу данных, включив новые серверы.

1 голос
/ 02 июня 2011

Может быть, я ошибаюсь или неправильно понял вопрос, но ...
Не могли бы вы использовать TRIGGERS ?
Например ... когда обнаруживается новая INSERT на "en_pages",делать ОБНОВЛЕНИЕ после в той же строке?
(я не знаю, как часто в этой таблице присутствуют ВСТАВКИ)
Это всего лишь идея.
Как часто используются en_pages.keyword и en_pages.keyword_id "изменяется после вставки?!?!?

0 голосов
/ 04 июня 2011

Я не знаю о mySQL, но обычно такого рода вещи работают быстрее в SQL Server, если вы обрабатываете ограниченное количество пакетов записей (скажем, 1000) за раз в цикле.

Вы также можете рассмотреть предложение where (я не знаю, что mySQL использует для «не равно», поэтому я использовал версию SQL Server):

WHERE en_pages.keyword <> keywords.keyword 

Таким образом, вы обновляете только те записи, которые имеют различие в области, в которой вы обновляете не все.

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