Искам да вмъкна всички записи от таблицата actualEntries в таблицата uniqueEntries въз основа на User_IDs на actualEntries, които не съществуват в uniqueEntries.
Започнах с sql клауза, съдържаща NOT IN
подзаявка, която е много бавна (при работа с 400K записа) и я превърнах в 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 записа, те завършват веднага, но когато ги пусна на 400K записа, те не завършват.
Какъв е най-бързият начин за извършване на тази операция?
АКТУАЛИЗАЦИЯ / РЕШЕНИЕ: Според @Rahul, @Steve E и @fhthiella актуализирах LEFT JOIN както следва и намалих времето за обработка до 2 минути за 470K записа.
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