Я хочу вставить все записи из таблицы factEntries в таблицу uniqueEntries на основе идентификаторов User_ID, которые не существуют в uniqueEntries.
Я начал с предложения sql, содержащего подзапрос NOT IN
, который очень медленный (при работе с записями 400 КБ), и превратил его в предложение LEFT JOIN
, но скорость не улучшилась.
Ниже приведено мое исходное предложение sql, содержащее подзапрос NOT IN
:
INSERT INTO uniqueEntries
SELECT *
FROM actualEntries
WHERE actualEntries.User_ID NOT IN (
SELECT uniqueEntries.User_ID
FROM uniqueEntries
)
GROUP BY User_ID"
Ниже приведено предложение sql после преобразования в LEFT JOIN
:
INSERT INTO uniqueEntries
SELECT actualEntries.*
FROM actualEntries
LEFT JOIN uniqueEntries
ON uniqueEntries.User_ID = actualEntries.User_ID
WHERE uniqueEntries.User_ID IS NULL
GROUP BY User_ID
Когда я запускаю оба запроса для 50 записей, они завершаются сразу, но когда я запускаю их для 400 000 записей, они не завершаются.
Как быстрее всего сделать эту операцию?
ОБНОВЛЕНИЕ / РЕШЕНИЕ. Согласно @Rahul, @Steve E и @fhthiella, я обновил LEFT JOIN следующим образом и сократил время обработки до 2 минут для 470 тыс. записей.
INSERT INTO uniqueEntries
SELECT actualEntries.*
FROM actualEntries
LEFT JOIN uniqueEntries
ON uniqueEntries.id = actualEntries.id
WHERE uniqueEntries.User_ID IS NULL GROUP BY User_ID