Podrías probar esto:
FROM workdone
LEFT JOIN staffcost ON workdone.date >= MAKEDATE(staffcost.costyear, 1)
AND workdone.date < MAKEDATE(staffcost.costyear+1, 1)
Esto permitirá el uso de un índice en workdone.date
para buscar fechas entre el primer día del costyear
hasta el primer día de costyear+1
, pero sin incluirlo .
En general, este tipo de búsqueda de rango puede explotar índices donde las funciones (como YEAR(datestamp)
) no puede.