我有以下 SQL 查询。
SELECT em.employeeid, tsi.timestamp
FROM timesheet_temp_import tsi
JOIN employee emp ON emp.employeeid = tsi.credentialnumber
WHERE
tsi.masterentity = 'MASTER' AND
tsi.timestamp NOT IN
(
SELECT ea.timestamp
FROM employee_attendance ea
WHERE
ea.employeeid = em.employeeid
AND ea.timestamp = tsi.timestamp
AND ea.ismanual = 0
)
GROUP BY em.employeeid, tsi.timestamp
此查询比较导入表(带有员工时间和出勤时间戳)。
有时
timesheet_temp_import
有超过95,000行,而我的查询必须仅向显示雇员的时间戳,这些时间戳是新。如果某个员工的时间戳已经存在,那么我必须将其排除。查询正在运行,但耗时超过 4 分钟,所以我想知道是否可以使用其他可以帮助我减少这段时间的
NOT IN
语句来改进 ojit_code 语句。 最佳答案
使用 NOT EXISTS
可能会对您有所帮助。
SELECT
em.employeeid,
tsi.timestamp
FROM timesheet_temp_import tsi
join employee emp ON emp.employeeid = tsi.credentialnumber
WHERE
tsi.masterentity = 'MASTER' AND
NOT EXISTS
(
SELECT NULL
FROM employee_attendance ea
WHERE
ea.employeeid = em.employeeid
AND ea.timestamp = tsi.timestamp
AND ea.ismanual = 0
)
GROUP BY
em.employeeid,
tsi.timestamp