#php #mysql #join #mysqli
#php #mysql #Присоединиться #mysqli
Вопрос:
запрос, который я хотел бы ускорить (или заменить другим процессом):
UPDATE en_pages, keywords
SET en_pages.keyword = keywords.keyword
WHERE en_pages.keyword_id = keywords.id
таблица en_pages имеет правильную структуру, но в ней есть только неуникальные идентификаторы страници_id и keyword_id. я пытаюсь добавить фактические ключевые слова (строки) в эту таблицу, где они соответствуют keyword_ids. в table en_pages есть 25 миллионов строк, которые нуждаются в обновлении.
я добавляю ключевые слова, чтобы к этой таблице можно было запрашивать в режиме реального времени и возвращать ключевые слова (соединение, очевидно, слишком медленное для «реального времени»).
мы применяем этот запрос (и некоторые другие) к подразделам нашего большего набора данных. мы часто делаем это, чтобы создавать пользовательские интерфейсы для определенных подразделов наших данных для разных групп пользователей (извините, если это сбивает с толку).
все это отлично работает, если вы дадите ему час на запуск, но я пытаюсь ускорить это.
есть ли лучший способ сделать это быстрее, используя php и / или mysql?
Комментарии:
1. Зачем вам обновлять всю таблицу так часто?
2. Что такое механизм обработки таблиц, какое у вас оборудование, какая у вас конфигурация экземпляра MySQL и т.д.?
Ответ №1:
На самом деле я не думаю, что вы можете ускорить процесс.
Вы все еще можете увеличить мощность своей базы данных, объединив новые серверы.
Ответ №2:
Возможно, я ошибаюсь или неправильно понял вопрос, но…
Не могли бы вы использовать ТРИГГЕРЫ?
Нравится… при обнаружении новой вставки в «en_pages» выполняется ОБНОВЛЕНИЕ после для этой же строки?
(Я не знаю, насколько часты ВСТАВКИ в этой таблице)
Это всего лишь идея.
Как часто «en_pages.ключевое слово»и «en_pages.keyword_id»изменяется после вставки ?!?!?
Ответ №3:
Я не знаю о MySQL, но обычно такого рода вещи выполняются быстрее в SQL Server, если вы обрабатываете ограниченное количество пакетов записей (скажем, 1000) за раз в цикле.
Вы также могли бы рассмотреть предложение where (я не знаю, что MySQL использует для «не равно», поэтому я использовал версию SQL Server):
WHERE en_pages.keyword <> keywords.keyword
Таким образом, вы обновляете только записи, которые имеют разницу в поле, вы обновляете не все из них.