This UNION query is very slow. With only 3,000 records in the Parent table
and 7,000 records in the Child table, it takes about 60 seconds to run and
returns about 2200 records.
Any ideas on speeding it up? Thanks.
-- PART 1: HAS NO CHILD RECORDS
SELECT P.PROJECT_ID, 'No Child Data' AS SUB_TYPE
FROM PROJECTS P LEFT JOIN PROJECTS_CHILDR EN C
ON P.PROJECT_ID = C.PROJECT_ID
WHERE P.PROJECT_ID IS NULL
UNION
-- PART 2: HAS CHILD RECORDS, BUT NOT OF TYPE Z
SELECT PROJECT_ID, 'Child Data, Not type Z' AS SUB_TYPE
FROM PROJECTS
WHERE PROJECT_ID NOT IN
(
(SELECT PROJECT_ID
FROM PROJECTS_CHILDR EN
WHERE CHILD_TYPE Like "Z*")
AND
PROJECT_ID NOT IN (
SELECT P.PROJECT_ID
FROM PROJECTS P LEFT JOIN PROJECTS_CHILDR EN C
ON P.PROJECT_ID = C.PROJECT_ID
WHERE P.PROJECT_ID IS NULL)
);
and 7,000 records in the Child table, it takes about 60 seconds to run and
returns about 2200 records.
Any ideas on speeding it up? Thanks.
-- PART 1: HAS NO CHILD RECORDS
SELECT P.PROJECT_ID, 'No Child Data' AS SUB_TYPE
FROM PROJECTS P LEFT JOIN PROJECTS_CHILDR EN C
ON P.PROJECT_ID = C.PROJECT_ID
WHERE P.PROJECT_ID IS NULL
UNION
-- PART 2: HAS CHILD RECORDS, BUT NOT OF TYPE Z
SELECT PROJECT_ID, 'Child Data, Not type Z' AS SUB_TYPE
FROM PROJECTS
WHERE PROJECT_ID NOT IN
(
(SELECT PROJECT_ID
FROM PROJECTS_CHILDR EN
WHERE CHILD_TYPE Like "Z*")
AND
PROJECT_ID NOT IN (
SELECT P.PROJECT_ID
FROM PROJECTS P LEFT JOIN PROJECTS_CHILDR EN C
ON P.PROJECT_ID = C.PROJECT_ID
WHERE P.PROJECT_ID IS NULL)
);
Comment